Generické typy
Generika se stala s .NETem 2 docela hustým nástrojem pro určení typů. Nemusíte nyní používat typ object. Generiku si lze představit jako šablonu v C++.
class GenericClass< X , Y>
{
private X prvekX;
private Y prvekY;
public GenericClass(X valX, Y valY)
{
prvekX = valX;
prvekY = valY;
}
public override string ToString()
{
return "Prvek X: "+ prvekX.ToString() + "\n Prvek Y: " + prvekY.ToString();
}
public string GetInfo()
{
return "Prvek X implementuje " + prvekX.GetType().GetMethods().Length.ToString() + " metod\n
Prvek Y implementuje " + prvekY.GetType().GetMethods().Length.ToString() + " metod";
}
}
Mluvíme-li o generickém kódu, máme na mysli kód, který využívá parametrizované typy. Parametrizované typy jsou nahrazeny konkrétními typy v době použití kódu. Generický typ T se uvádí za název definovaného objektu (třídy, rozhraní, metody, atd.) a je ohraničen špičatými závorkami . Princip generik je znám také z jiných jazyků jako Eiffel, Ada (Java) a především z jazyku C++. Generika mají podobnou syntaxi jako šablony v programovacím jazyku C++, avšak realizují hodně odlišnou implementaci. V jazyce C# 2.0 lze pomocí generik definovat třídy, struktury, rozhraní, metody a delegáty. Použitím generik získáme několik výhod:
- 1) V prvé řadě dosáhneme silné typové kontroly v době překladu zdrojového kódu, a tedy možného nalezení všech případů, které by mohly způsobit havárii aplikace způsobenou nesprávným využitím použitých typů.
- 2) Odstraníme také časté a z časového hlediska zbytečné operace boxing a unboxing.
- 3) Omezení explicitních typových konverzí, které jsou nutné v době překladu, kdy neznáme typ objektu uloženého v univerzální kolekci.