1. Kas yra bendrinis?
Generiniai yra nauja sintaksė, įvesta C# 2.0, ne sintaksė cukrus, bet funkcijos, kurias suteikia sistemos atnaujinimai 2.0.
Programuodami programas dažnai susiduriame su moduliais, turinčiais labai panašias funkcijas, tačiau jie tvarko skirtingus duomenis. Tačiau mes neturime kito pasirinkimo, kaip rašyti kelis metodus atskirai, kad galėtume tvarkyti skirtingus duomenų tipus. Šiuo metu kyla klausimas, ar yra būdas naudoti tą patį metodą skirtingų tipų parametrams spręsti? Generinių vaistų atsiradimas yra specialiai sukurtas šiai problemai išspręsti.
2. Kodėl verta naudoti generinius vaistus
Pažvelkime į šį pavyzdį:
Rezultatus:
Iš aukščiau pateiktų rezultatų matome, kad šie trys metodai turi tas pačias funkcijas, išskyrus skirtingus parametrus, kuriuos jie praeina. 1.0 versijos metu nebuvo generinių vaistų sąvokos, tad ką daryti. Manau, kad daugelis žmonių galvos apie vienos iš trijų pagrindinių OOP savybių paveldėjimą, mes žinome, kad C# objektas yra visų tipų bazinė klasė, o aukščiau pateiktas kodas yra optimizuotas taip:
Rezultatus:
Iš aukščiau pateiktų rezultatų matome, kad objekto tipo naudojimas atitinka mūsų reikalavimus ir išsprendžia kodo pakartotinio naudojimo problemą. Kai kurie žmonės gali paklausti, kodėl galima perduoti int, string ir t.t., kai tai apibrėžiama kaip objekto tipas? Yra dvi priežastys:
1. Objekto tipas yra visų tipų pirminė klasė.
2. Paveldėjimo būdu poklasiai turi visus pirminės klasės požymius ir elgesį, o visur, kur pasirodo pirminė klasė, ją galima pakeisti poklasiais.
Tačiau aukščiau pateiktas objekto tipo metodas sukelia dar vieną problemą: boksas ir išpakavimas gali sumažinti programos našumą.
"Microsoft" pristatė generinius vaistus C# 2.0, kurie gali labai gerai išspręsti aukščiau nurodytas problemas.
3. Bendrieji tipo parametrai
Bendrojo tipo arba metodo apibrėžime tipo parametras yra kliento nurodytas konkretaus tipo vietos rezervavimo ženklas, kai jis sukuria bendrojo tipo kintamąjį. Bendroji klasė (GenericList<T>) negali būti naudojama tokia, kokia yra, nes ji nėra tikrasis tipas; Tai labiau panašu į tipų brėžinį. Norint naudoti GenericList<T>, kliento kodas turi deklaruoti ir sukurti konstrukcijos tipą, kampiniuose skliaustuose nurodydamas tipo parametrą. Šios konkrečios klasės tipo argumentas gali būti bet koks tipas, kurį atpažįsta kompiliatorius. Galite sukurti bet kokį skaičių konstrukcijos tipo egzempliorių, kurių kiekvienas turi skirtingą tipo parametrą.
Aukščiau pateiktame pavyzdyje pateiktą kodą galima modifikuoti taip:
Skambinkite:
Rodyti rezultatus:
|