Bevezetés a C # generikus termékekbe
Mi tehát a Generics fogalma a C # -ben? Egyszerű szavakkal: a típusfüggetlen osztályok, interfészek, módszerek, delegálók, tulajdonságok stb. Meghatározásának fogalma. Ez azt jelenti, hogy meghatározhat egy általános osztályt vagy metódustestet, és megadhatja az aktuális típust a meghívás során.
Így a Generics olyan, mint a kódsablonok. Ezek lehetővé teszik, hogy típusbiztonsági kódblokkot írjon anélkül, hogy bármilyen adott adattípusra hivatkozna. A kód típusát a fordítás idején határozzuk meg az osztály vagy módszer meghívásakor.
A generikus szintaxis a C # -ben
Nézzük meg az általános nyilatkozat szintaxisát a C # -ben. Ez egy nagyon egyszerű szintaxis.
Általános gyakorlatként a nagybetűvel és szögletes zárójelben levő „T” betű egy általános kód C # -ben történő megadását jelenti. De ez nem a felhatalmazás. Bármely nagybetűs betű, szögletes zárójelbe zárva, felhasználható egy általános kód jelölésére.
Általános osztály deklarálása:
public class MyGenericClass
Általános osztály elindítása:
MyGenericClass = new MyGenericClass();
Általános származtatott osztály deklarálása:
public class MyGenericDerivedClass : MyGenericBaseClass
Általános módszer deklarálása:
public T MyGenericMethod(T item);
Hogyan működnek a generikus gyógyszerek a C # -ben?
Amikor egy általános kódot deklarál a C # -ben, a fordító elkészíti a kódnak megfelelő sablont. Ezt a sablont ellenőrzik az összes fordítási hiba szempontjából, kivéve a típusbiztonságot. A következő lépés akkor következik, amikor az általános kódot meghívják vagy meghívják a program egy másik részében. A meghíváskor meg kell adnia azt a típust, amellyel általános kódját összeállítják. Amikor a fordító eléri a meghívási pontot, beilleszti a korábban összeállított sablonban megadott típust. Ezután újra összeállítják a típusbiztonság ellenőrzése érdekében. A kód átadása után készen áll a végrehajtásra.
Az összeállított kódot az alábbi példákban láthatjuk, hogy jobban megértsük az általános sablonokat.
Példa a generikus gyógyszerekre a C # -ben
Az alábbiakban bemutatjuk a C # Generics különféle példáit:
Generikus osztály
Kód:
using System;
using System.Collections.Generic;
public class GenericClass
(
List genericList;
public GenericClass()
(
genericList = new List();
)
public void AddToList(T item)
(
genericList.Add(item);
)
public void DisplayList()
(
foreach (var ele in genericList)
(
Console.Write("(0)\t", ele);
)
)
)
public class Program
(
public static void Main()
(
GenericClass intGenericObj = new GenericClass();
GenericClass stringGenericObj = new GenericClass();
intGenericObj.AddToList(28);
intGenericObj.AddToList(999);
intGenericObj.AddToList(0);
intGenericObj.AddToList(-123);
intGenericObj.AddToList(100);
stringGenericObj.AddToList("Hello");
stringGenericObj.AddToList("Bonjour");
stringGenericObj.AddToList("Ola");
stringGenericObj.AddToList("Ciao");
stringGenericObj.AddToList("Hallo");
intGenericObj.DisplayList();
Console.WriteLine("\n");
stringGenericObj.DisplayList();
))
Kimenet:
Ugyanaz a kód is átírható, mint az alábbiakban. Ez szemlélteti egy generikus osztály meghatározásának hatékonyságát, amely több objektum számára típusbiztonságossá tehető egyetlen objektumban.
using System;
using System.Collections.Generic;
public class GenericClass
(
List genericList1;
List genericList2;
public GenericClass()
(
genericList1 = new List();
genericList2 = new List();
)
public void AddToList(T item1, U item2)
(
genericList1.Add(item1);
genericList2.Add(item2);
)
public void DisplayList()
(
foreach (var ele in this.genericList1)
(
Console.Write("(0)\t", ele);
)
Console.WriteLine("\n");
foreach (var ele in this.genericList2)
(
Console.Write("(0)\t", ele);
)
)
)
public class Program
(
public static void Main()
(
GenericClass genericObj = new GenericClass();
genericObj.AddToList(28, "Hello");
genericObj.AddToList(999, "Bonjour");
genericObj.AddToList(0, "Ola");
genericObj.AddToList(-123, "Ciao");
genericObj.AddToList(100, "Hallo");
genericObj.DisplayList();
)
)
Kimenet:
Összeállított kód:
Annak érdekében, hogy képet kapjunk arról, hogy az adattípus hogyan oldódik meg a Generics alkalmazásban, nézzük meg az összeállított kódot, amelyet akkor generálunk, amikor az osztályt egész szám- és karakterlánctípusokkal a fenti példában mutatjuk be.
using System;
using System.Collections.Generic;
public class GenericClass
(
List genericList1;
List genericList2;
public GenericClass()
(
genericList1 = new List();
genericList2 = new List();
)
public void AddToList(int item1, string item2)
(
genericList1.Add(item1);
genericList2.Add(item2);
)
public void DisplayList()
(
foreach (var ele in this.genericList1)
(
Console.Write("(0)\t", ele);
)
Console.WriteLine("\n");
foreach (var ele in this.genericList2)
(
Console.Write("(0)\t", ele);
)
)
)
public class Program
(
public static void Main()
(
GenericClass genericObj = new GenericClass();
genericObj.AddToList(28, "Hello");
genericObj.AddToList(999, "Bonjour");
genericObj.AddToList(0, "Ola");
genericObj.AddToList(-123, "Ciao");
genericObj.AddToList(100, "Hallo");
genericObj.DisplayList();
)
)
Általános módszer
Kód:
using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
int() intArr = (12, 23, 43, 94, 35);
double() doubleArr = (12.3, 45.6, 98.7, 1.45, 82.653);
string() strArr = ("Hello", "Bonjour", "Ola", "Ciao", "Hallo");
Console.WriteLine("The largest integer in the array is (0)", findMax(intArr));
Console.WriteLine("The largest floating-point number in the array is (0)", findMax(doubleArr));
Console.WriteLine("The largest string in the array is (0)", findMax(strArr));
)
static T findMax(T() items)
where T : IComparable
(
T max = items(0);
int position = 0;
for (int i = 1; i < items.Length; i++)
(
if (items(i).CompareTo(max) > 0)
(
max = items(i);
position = i;
)
)
return max;
)
)
Kimenet:
A System.Collections.Generikus névtér
A System.Collections.Generic névtér a C # -ben interfészeket és osztályokat tartalmaz, amelyek meghatározzák az általános gyűjteményeket. Lehetővé teszik a programozók számára, hogy olyan általános gyűjteményeket hozzanak létre, amelyek jobban teljesítenek és ugyanolyan erős típusúak, mint a nem generikus gyűjtemények.
Ez a névtér listákat, szótárakat, kapcsolt listákat, hashákat, kulcs-érték párokat, halmokat stb. Tartalmaz, amelyek mindegyike általános jellegű. A programozók végrehajthatják őket kódjukban.
A C # generikus termékek fontossága
Az alábbiakban bemutatjuk a C # Generics fontosságát:
- A generikus készülékek lehetővé teszik a kód újrafelhasználhatóságát: a jó programozás alapelve. Nem kell ugyanazt a kódot írni minden várható adattípushoz. Egyszerűen definiál egy típustól független kódot, és mondja meg a fordítónak, hogy a tényleges adattípust a kód meghívásakor adják meg.
- A boksz és a dohányzás elkerülésének megakadályozása: Természetesen a generikus gyógyszerek használatát az objektumosztályon keresztül lehet megkerülni. Az alábbi két kódrész egyenértékű feladatként.
Általános kód: public T MyFunc (T tétel);
Nem általános kód: nyilvános objektum MyFunc (objektum elem)
Az objektum osztály felülbírálja az összes osztályt, így a fenti nem általános kód felhasználható típustól független kódsablonok előállítására.
A két kód között azonban hatalmas teljesítménybeli különbség van. Az objektumosztály használata további költségeket von maga után az adattípusok dobozosítása és eltávolítása érdekében. A generikus termékek kiküszöbölik ezt, és így jobban teljesítenek.
Következtetés
Így láthattuk, hogy a generikumok hogyan kell programozni a programozási funkciókat. Ez egy nagyon hasznos koncepció, nem csak a C #, hanem a legtöbb modern programozási nyelvben is.
Ezenkívül erősen ajánlott megismerni a System.Collections.Generic névteret a C # -ben. A generikus termékek teljesítményének megértése érdekében mélyebben kell belemerülni ahhoz, hogy a bokszolás és a dobozolás miként befolyásolja a memóriát és a végrehajtási időt.
Ajánlott cikkek
Ez a C # Generics útmutatója. Itt tárgyaljuk a fontosságot és a Generics működését a C # -ben, különféle példákkal és a kód megvalósításával együtt. A további javasolt cikkeken keresztül további információkat is megtudhat -
- A C # vagy az operátor fej-fej összehasonlítása
- Túlterhelés és felülbírálás a Java-ban
- Milyen haszna van a módszer túlterhelésének?
- Hogyan működik a zárt osztály a C # -ben?
- Típusok és kezelési hibák a JavaScript-ben
- PL / SQL gyűjtemények Szintaxis, típusok, kivételek