1. Ce este genericul?
Genericele sunt o sintaxă nouă introdusă în C# 2.0, nu zahărul sintaxei, ci caracteristici oferite de actualizările cadrului în 2.0.
Când programăm programe, întâlnim adesea module cu funcții foarte similare, dar care gestionează date diferite. Dar nu avem de ales decât să scriem mai multe metode separat pentru a gestiona diferite tipuri de date. În acest moment, întrebarea este: există o modalitate de a folosi aceeași metodă pentru a gestiona diferite tipuri de parametri? Apariția genericelor este concepută special pentru a rezolva această problemă.
2. De ce să folosești genericele
Să aruncăm o privire la următorul exemplu:
Rezultat:
Din rezultatele de mai sus, putem vedea că aceste trei metode au aceleași funcții, cu excepția parametrilor diferiți pe care îi transmit. La momentul versiunii 1.0, nu exista conceptul de generice, deci ce să faci. Cred că mulți oameni se vor gândi la moștenirea uneia dintre cele trei caracteristici majore ale OOP, știm că în C#, object este clasa de bază a tuturor tipurilor, iar codul de mai sus este optimizat astfel:
Rezultat:
Din rezultatele de mai sus, putem vedea că folosirea tipului Object îndeplinește cerințele noastre și rezolvă reutilizarea codului. Unii oameni s-ar putea întreba de ce este posibil să treci int, string etc. când este definit ca un tip de obiect? Există două motive:
1. Tipul obiectului este clasa părinte a tuturor tipurilor.
2. Prin moștenire, subclasele au toate atributele și comportamentele clasei părinte, iar oriunde apare clasa părinte, aceasta poate fi înlocuită cu subclase.
Dar metoda de tip obiect de mai sus aduce o altă problemă: boxarea și unboxing-ul pot reduce performanța programului.
Microsoft a introdus generice în C# 2.0, care pot rezolva foarte bine problemele de mai sus.
3. Parametri generici de tip
Într-o definiție generică de tip sau metodă, un parametru de tip este un element de înlocuire specificat de client pentru un anumit tip atunci când instanțiază o variabilă de tip generic. Clasa generică (GenericList<T>) nu poate fi folosită așa cum este deoarece nu este un tip adevărat; Este mai degrabă un plan pentru tipuri. Pentru a folosi <T>GenericList, codul client trebuie să declare și să instanțieze un tip de construct prin specificarea parametrului de tip în paranteze unghiulare. Argumentul de tip pentru această clasă poate fi orice tip recunoscut de compilator. Poți crea orice număr de instanțe de tip construct, fiecare cu un parametru de tip diferit.
Codul din exemplul de mai sus poate fi modificat astfel:
Anunț:
Arată rezultatele:
|