csharp.aspone.cz csharp.aspone.cz

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.