Ograničenja generičkih tipova omogućavaju programerima da definišu uslove koje generički tip mora ispunjavati. Ovo omogućava veću kontrolu nad generičkim tipovima i osigurava da se generički kod koristi sa tipovima koji ispunjavaju određene zahteve. Ova ograničenja pomažu u održavanju sigurnosti tipova i sprečavanju grešaka u kodu.

Ključne tačke o ograničenjima generičkih tipova:
  1. Osnovna sintaksa: Ograničenja se definišu koristeći ključnu reč where prilikom deklaracije generičke klase, metode ili interfejsa.

public class MyGenericClass<T> where T : SomeBaseClass
{
// Kod klase
}

2. Vrste ograničenja:

  • Ograničenje na baznu klasu ili interfejs: Ovim ograničenjem se osigurava da generički tip bude ili izveden iz određene klase ili implementira određeni interfejs.

public class MyClass<T> where T : BaseClass
{
// T mora biti ili BaseClass ili klasa izvedena iz BaseClass
}

public class MyClass<T> where T : IMyInterface
{
// T mora implementirati IMyInterface
}

  • Ograničenje na konkretni tip: 

Ovim ograničenjem se omogućava samo korišćenje specifičnih tipova.

public class MyClass<T> where T : class // T mora biti referentni tip (klasa)
{
// Kod klase
}

public class MyClass<T> where T : struct // T mora biti vrednosni tip
{
// Kod klase
}

  • Ograničenje na parameterless konstruktor: 

Ovim ograničenjem se osigurava da generički tip ima podrazumevani konstruktor bez parametara, što omogućava kreiranje instanci tog tipa unutar generičke klase ili metode.

public class MyClass<T> where T : new()
{
public T CreateInstance()
{
return new T(); // T mora imati podrazumevani konstruktor
}
}

  • Više ograničenja: 

Možete kombinovati više ograničenja za jedan generički tip.

public class MyClass<T> where T : BaseClass, IMyInterface, new()
{
// T mora biti izveden iz BaseClass, implementirati IMyInterface i imati podrazumevani konstruktor
}

Primeri upotrebe ograničenja:
1.
public class Repository<T> where T : IEntity
{
public void Save(T entity)
{
// Kod za čuvanje entiteta
}
}

public interface IEntity
{
int Id { get; set; }
}

public class User : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
}

2.
public class NumericOperations<T> where T : struct
{
public T Add(T a, T b)
{
// Operacije sa vrednosnim tipovima
}
}

3.
public class Factory<T> where T : new()
{
public T Create()
{
return new T(); // Kreiranje instance T
}
}

Prednosti korišćenja ograničenja:
  • Sigurnost tipova: Ograničenja osiguravaju da generički kod radi sa tipovima koji ispunjavaju određene zahteve.
  • Veća kontrola: Omogućava veću kontrolu nad tipovima koji se koriste u generičkom kodu.
  • Preprečavanje grešaka: Sprečava greške koje bi mogle nastati kada se generički tip koristi na način za koji nije predviđen.

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