C# Generics (Polski)
Generic oznacza formę ogólną, a nie konkretną. W C# generic oznacza, że nie jest specyficzny dla określonego typu danych.
C# umożliwia definiowanie klas ogólnych, interfejsów, klas abstrakcyjnych,pól, metod, metod statycznych, właściwości, zdarzeń, delegatów i operatorów przy użyciu parametru type i bez określonego typu danych. Parametr type jest symbolem zastępczym dla określonego typu określonego podczas tworzenia instancji typu generycznego.
Typ generyczny deklarowany jest przez podanie parametru typu w nawiasie kątowym po nazwie typu, np., TypeName<T>
gdzieT
jest parametrem typu.
klasy generyczne
klasy generyczne są definiowane za pomocą parametru type w nawiasie kątowym po nazwie klasy. Poniżej zdefiniowano klasę generyczną.
powyżejDataStore
jest klasą generyczną., T
jest nazywany parametrem typu, który może być używany jako typ pól, właściwości, parametrów metody, typów zwrotnych i delegatów w klasieDataStore
. Na przykład Data
jest właściwością generyczną, ponieważ użyliśmy parametru type T
jako jego typu zamiast określonego typu danych.
T
jako parametru typu. Parametr type można nadać dowolnej nazwie., Ogólnie, T
jest używany, gdy istnieje tylko jeden parametr typu. Zaleca się użycie bardziej czytelnej nazwy parametru typu zgodnie z wymaganiami, takimi jak TSession
, TKey
,TValue
itd. Dowiedz się więcej o wytycznych dotyczących nazewnictwa parametrów typu Możesz również zdefiniować wiele parametrów typu oddzielonych przecinkiem.
Tworzenie instancji klasy generycznej
możesz utworzyć instancję klasy generycznej, określając rzeczywisty typ w nawiasach kątowych., Poniższe tworzy instancję klasy generycznej DataStore
.
powyżej określiliśmy Typ string
w nawiasach kątowych podczas tworzenia instancji. Tak więc T
zostanie zastąpiony przezstring
Typ, gdzieT
jest używany w całej klasie podczas kompilacji. Dlatego typem właściwości Data
będzie string
.
poniższy rysunek ilustruje działanie leków generycznych.,
możesz przypisać wartość ciągu znaków do właściwościData
. Próba przypisania wartości innych niż string spowoduje błąd w czasie kompilacji.
Możesz określić różne typy danych dla różnych obiektów, jak pokazano poniżej.
charakterystyka klasy generycznej
- Klasa generyczna zwiększa możliwość ponownego użycia. Im więcej parametrów typu, tym bardziej nadaje się do wielokrotnego użytku., Jednak zbyt duże uogólnienie utrudnia zrozumienie i utrzymanie kodu.
- Klasa generyczna może być klasą bazową dla innych klas generycznych lub nie-generycznych lub klas abstrakcyjnych.
- Klasa generyczna może być wyprowadzona z innych generycznych lub nie-generycznych interfejsów, klas lub klas abstrakcyjnych.
pola generyczne
Klasa generyczna może zawierać pola generyczne. Nie można go jednak zainicjować.
poniższa tablica deklaruje tablicę generyczną.,
metody generyczne
metoda zadeklarowana z parametrami typu dla zwracanego typu lub parametrów nazywa się metodą generyczną.
powyższe metodyAddorUpdate()
orazGetData()
są metodami generycznymi. Rzeczywisty typ danychitem
parametr zostanie określony podczas tworzenia instancji klasyDataStore<T>
, jak pokazano poniżej.,
typ parametru generycznego może być używany z wieloma parametrami z parametrami niestandardowymi lub bez nich oraz z typem zwrotnym. Poniżej znajdują się poprawne ogólne metody przeciążenia.
Klasa Nie-generyczna może zawierać metody generyczne, określając parametr typu w nawiasach kątowych z nazwą metody, jak pokazano poniżej.
zalety generyków
- Generyki zwiększają możliwość ponownego użycia kodu. Nie musisz pisać kodu do obsługi różnych typów danych.
- leki generyczne są bezpieczne dla typu., Jeśli spróbujesz użyć innego typu danych niż ten określony w definicji, pojawią się błędy w czasie kompilacji.
- Generic ma przewagę wydajności, ponieważ usuwa możliwości boksu i unboxingu.