Uvod:

Generičke klase u C# omogućavaju kreiranje objekata koji mogu raditi sa različitim tipovima podataka. Ovaj koncept povećava fleksibilnost koda i omogućava ponovnu upotrebu, jer omogućava kreiranje jedne klase koja može raditi sa različitim tipovima.

Ključni pojmovi:
  • Generički tip: Tip koji je definisan sa parametrima koji se mogu koristiti sa bilo kojim tipom podataka.
  • Generička klasa: Klasa koja koristi generičke tipove kao parametre, što joj omogućava da radi sa različitim tipovima podataka bez ponavljanja koda.
Sintaksa definisanja generičke klase:
public class Box<T>
{
private T value;

public void SetValue(T value)
{
this.value = value;
}

public T GetValue()
{
return value;
}
}

  • T je generički tip parametra koji omogućava klasi Box da radi sa različitim tipovima podataka.

Primer upotrebe generičke klase:
  1. Korišćenje sa različitim tipovima podataka:

class Program
{
static void Main(string[] args)
{
Box<int> intBox = new Box<int>();
intBox.SetValue(123);
Console.WriteLine(intBox.GetValue()); // Output: 123

Box<string> stringBox = new Box<string>();
stringBox.SetValue("Hello, World!");
Console.WriteLine(stringBox.GetValue()); // Output: Hello, World!
}
}

  • U ovom primeru, klasa Box se koristi sa različitim tipovima podataka (int i string), što pokazuje njenu fleksibilnost.
Primer sa više generičkih tipova:
public class Pair<T1, T2>
{
public T1 First { get; set; }
public T2 Second { get; set; }

public Pair(T1 first, T2 second)
{
First = first;
Second = second;
}
}

class Program
{
static void Main(string[] args)
{
Pair<int, string> pair = new Pair<int, string>(1, "One");
Console.WriteLine("Prvi deo: " + pair.First+" , Drugi deo: "+pair.Second);
// Output: Prvi deo: 1, Drugi deo: One
}
}

  • U ovom primeru, klasa Pair koristi dva generička tipa, omogućavajući rad sa parovima različitih tipova podataka.

Prednosti korišćenja generičkih klasa:
  • Ponovna upotrebljivost koda: Jednom napisana generička klasa može se koristiti sa bilo kojim tipom podataka.
  • Smanjena duplikacija koda: Generičke klase eliminišu potrebu za pisanjem posebnog koda za svaki tip podataka.
  • Sigurnost tipova: Generički kod omogućava rano otkrivanje grešaka u vezi sa tipovima podataka, jer se proverava tokom kompajliranja.

Za one koji žele da znaju malo više:

Generičke klase mogu imati ograničenja koja specifikuju da tip parametar mora implementirati određeni interfejs ili nasleđivati određenu klasu:

public class Repository<T> where T : IEntity
{
private List<T> items = new List<T>();

public void Add(T item)
{
items.Add(item);
}

public T Get(int id)
{
return items.FirstOrDefault(item => item.Id == id);
}
}

U ovom primeru, Repository klasa može raditi samo sa tipovima koji implementiraju IEntity interfejs.

Zadaci za vežbu:
  1. Kreiranje generičke klase: Kreirati generičku klasu Storage<T> koja može da čuva i vraća elemente različitih tipova.
  2. Kreiranje generičke klase sa više tipova: Kreirati klasu Triplet<T1, T2, T3> koja može da čuva tri elementa različitih tipova.
Opciono:

Iza dugmeta su sakrivena

  1. Kada bi bilo korisno koristiti generičku klasu umesto tradicionalne klase?
  2. Koje su potencijalne zamke prilikom korišćenja generičkih klasa u C#?
  3. Kako bi se generičke klase mogle koristiti u stvarnim aplikacijama koje učenici poznaju?

Last modified: Tuesday, 2 December 2025, 4:52 AM