Constrângeri generice — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

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 (precum int, float etc.).

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
}