Nivelul 6 — Elemente generice și delegați
Constrângeri generice
Note originale de SunDiaL · Vezi sursa în engleză
Poți restricționa tipurile acceptate de un element generic folosind constrângeri. Constrângerile uzuale includ:
where T : class— T trebuie să fie un tip referință;where T : struct— T trebuie să fie un tip valoare;where T : new()— T trebuie să aibă un constructor public fără parametri;where T : BaseClass— T trebuie să moștenească o anumită clasă de bază;where T : Interface— T trebuie să implementeze o anumită interfață;where T : unmanaged— T trebuie să fie un tip negestionat (precumint,floatetc.).
Exemplu
public class Printer<T> where T : class
{
public void Print(T item)
{
if (item == null)
{
Console.WriteLine("Nothing to print.");
return;
}
Console.WriteLine(item.ToString());
}
}
public void Main()
{
Printer<string> p1 = new Printer<string>();
p1.Print("Hello"); // prints "Hello"
p1.Print(null); // prints "Nothing to print"
Printer<int> p2 = new Printer<int>(); // compile-time error: int is not a class
}