Cream o metoda generica in interiorul careia vrem sa setam o valoare implicita pentru variabila item de tip T. Scriem astfel:
public static void GenericMethod<T>() { //eroare la compilare T item = null; }
In momentul compilarii apare urmatoarea eroare: Cannot convert null to type parameter ‘T’ because it could be a non-nullable value type. Consider using ‘default(T)’ instead. Intr-adevar, pentru ca tipul T nu are nici o constrangere, acesta poate fi de tip valoare sau de tip referinta. Daca se aplica primul caz, valoarea nu poate fi null, motiv pentru care va fi generata eroare de compilare. Daca vom adauga o constrangere pentru T la tipul de referinta, eroarea va disparea si nici la runtime nu vor fi probleme.
public static void GenericMethod<T>() where T : class { //fara eroare la compilare T item = null; }
Presupunem ca nu dorim sa folosim constrangerea. Microsoft a introdus in C# cuvantul cheie default oferind astfel posibilitatea programatorilor de a stabili valoare implicita variabilelor. Metoda de mai sus poate fi rescrisa fara a folosi constrangeri:
public static void GenericMethod<T>() { T item = default(T); }
Daca apelam metoda pentru un tip referinta, valoarea implicita pentru variabila item va fi null, iar pentru tipul valoare va fi 0.
static void Main(string[] args) { GenericMethod<int>(); GenericMethod<Agent>(); }