C# Generics (Polski)

0 Comments

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ą.

przykład: Zdefiniuj 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.

Uwaga
nie jest wymagane używanieT 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 Tzostanie zastąpiony przezstringTyp, 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.

Reklama

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ć.

przykład: pole Generic

poniższa tablica deklaruje tablicę generyczną.,

przykład: Generic Array

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

  1. Generyki zwiększają możliwość ponownego użycia kodu. Nie musisz pisać kodu do obsługi różnych typów danych.
  2. 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.
  3. Generic ma przewagę wydajności, ponieważ usuwa możliwości boksu i unboxingu.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *