Typy generyczne pozwalają tworzyć klasy, metody i struktury działające na różnych typach danych, ale z zachowaniem kontroli typów już na etapie kompilacji.
W C# typ generyczny zapisuje się z użyciem nawiasów ostrych, np. List<T>, gdzie T oznacza parametr typu. Podczas tworzenia obiektu podaje się konkretny typ, np. int, string lub własną klasę.
Przykład
List<int> liczby = new List<int>();
liczby.Add(10);
liczby.Add(25);
W tym przykładzie List<int> oznacza listę przechowującą wyłącznie liczby całkowite typu int. Nie można dodać do niej tekstu:
liczby.Add("tekst"); // błąd kompilacji
Po co stosuje się typy generyczne?
Typy generyczne są używane, ponieważ:
- zwiększają bezpieczeństwo typów,
- ograniczają ryzyko błędów w czasie działania programu,
- eliminują potrzebę częstego rzutowania,
- pozwalają pisać bardziej uniwersalny kod.
Typowe przykłady generyków
W C# często spotyka się kolekcje generyczne:
List<string> imiona = new List<string>();
Dictionary<int, string> uczniowie = new Dictionary<int, string>();
Queue<double> wyniki = new Queue<double>();
W każdym przypadku typ podany w nawiasach ostrych określa, jakie dane mogą być przechowywane lub przetwarzane.
Wniosek egzaminacyjny
Jeżeli widzisz zapis:
List<int> wykaz = new List<int>();
to oznacza, że lista wykaz przechowuje elementy typu int, czyli liczby całkowite.