|
|
Julkaistu 28.1.2019 16.03.40
|
|
|
|

1. Mikä on geneerinen?
Geneeriset ovat uusia syntaksia, jotka otettiin käyttöön C# 2.0:ssa, ei syntaksisokeria, vaan ominaisuuksia, joita kehyspäivitykset tarjoavat 2.0:ssa.
Kun ohjelmoimme ohjelmia, kohtaamme usein moduuleja, joilla on hyvin samankaltaiset toiminnot, mutta ne käsittelevät eri dataa. Mutta meillä ei ole muuta vaihtoehtoa kuin kirjoittaa useita metodeja erikseen käsittelemään eri tietotyyppejä. Tällä hetkellä kysymys kuuluu, voiko samaa menetelmää käyttää eri parametrien käsittelyyn? Geneeristen lääkkeiden synty on suunniteltu erityisesti ratkaisemaan tämä ongelma.
2. Miksi käyttää geneerisiä
Katsotaanpa seuraavaa esimerkkiä:
Tulos:
Yllä olevista tuloksista voimme nähdä, että näillä kolmella menetelmällä on samat funktiot, paitsi että ne läpäisevät eri parametrit. Version 1.0 aikaan ei ollut olemassa geneeristen käsitteitä, joten mitä tehdä. Uskon, että moni ajattelee yhden kolmesta OOP:n pääominaisuudesta periytymistä; tiedämme, että C#:ssa objekti on kaikkien tyyppien perusluokka, ja yllä oleva koodi on optimoitu seuraavasti:
Tulos:
Yllä olevista tuloksista voimme nähdä, että Object-tyypin käyttö täyttää vaatimuksemme ja ratkaisee koodin uudelleenkäytettävyyden. Jotkut saattavat kysyä, miksi on mahdollista välittää int, string jne., kun se määritellään objektityypiksi? Syitä on kaksi:
1. Oliotyyppi on kaikkien tyyppien emoluokka.
2. Perinnön kautta aliluokilla on kaikki emoluokan ominaisuudet ja käyttäytymismallit, ja missä emoluokka esiintyy, se voidaan korvata aliluokilla.
Mutta yllä oleva objektityyppimenetelmä tuo mukanaan toisen ongelman: laatikoiminen ja purkaminen voivat heikentää ohjelman suorituskykyä.
Microsoft esitteli geneeriset mallit C# 2.0:ssa, jotka pystyvät ratkaisemaan edellä mainitut ongelmat erittäin hyvin.
3. Yleiset tyyppiparametrit
Yleisessä tyyppi- tai metodimäärittelyssä tyyppiparametri on asiakas määrittelemä paikkamerkki tietylle tyypille, kun se ilmentää geneerisen tyypin muuttujan. Geneeristä luokkaa (GenericList<T>) ei voida käyttää sellaisenaan, koska se ei ole todellinen tyyppi; Se on enemmänkin tyyppien piirustuksena. GenericListin käyttämiseksi <T>asiakaskoodin täytyy ilmoittaa ja toteuttaa konstruktiotyyppi määrittämällä tyyppiparametri kulmasulkeissa. Tämän luokan tyyppiargumentti voi olla mikä tahansa kääntäjän tunnistama tyyppi. Voit luoda minkä tahansa määrän konstruktiotyypin instansseja, joilla jokaisella on eri tyyppiparametri.
Yllä olevan esimerkin koodia voidaan muokata seuraavasti:
Soita:
Näytä tulokset:
|
Edellinen:.NET Core File -palveluntarjoajatSeuraava:MySQL-tietokannan nimi, taulun nimi ja kentän nimikysely
|