|
|
Julkaistu 19.1.2017 15.18.00
|
|
|
|

Olen tehnyt .NET-kehitystä pitkään, ja äskettäin arvostin kirjan "C# Advanced Programming". Huomasin, että monet ongelmat, joita ennen tuntui ymmärtävän mutta joita en ymmärtänyt, voidaan itse asiassa hitaasti tutkia ja ymmärtää.
Joten aion alkaa kirjoittaa blogikirjoitusta aiheesta "C# Advanced Programming Series". Se pohjautuu kirjan "C# Advanced Programming" käsitteeseen ja viittaa myös muiden asiantuntijoiden blogikirjoituksiin, toivottavasti ymmärrätte. Jos jokin on vialla, korjaa se.
(Lisäksi: Tämä blogikirjoitus ei selitä määritelmien ja kieliopin perusteita.) )
Puhutaanpa komissioinnista.
Delegatea käytetään laajasti .NET:ssä. Lambda-ilmaisut, tapahtumat, anonymiteettimenetelmät jne. otetaan mukaan (pysy kuulolla seuraavia blogikirjoituksia varten).
Mitä siis on luottamuksellinen?
Yksinkertaisesti sanottuna delegaatit eivät eroa metodien määrittämisestä, paitsi että niiden täytyy määritellä delegaattiavainsana eikä niillä ole metodin entiteettiä. Voit ajatella sitä esimerkiksi paikkamerkkinä, kun kirjoitat koodia tietämättä, mitä olet tekemässä. Sinun täytyy vain tietää, mitkä parametrit ja tulostyypit ovat ja määritellä ne. Tämä on kirjassa esitetty menetelmä, jonka mukaan allekirjoituksen tulee tarkoittaa samaa.
Määritellään perusdelegaatio:
Toteutuksen tulokset:
Näetkö yllä olevan käytännöllisen paikan luottaa? NimittäinDelegaatti voi suorittaa minkä tahansa metodin, jolla on sama sisääntuloparametri ja palautustyyppi, tai jopa metodijonon, jolla on sama allekirjoitus.
Täytyykö metodiallekirjoituksemme (eli tuonti- ja tulostusparametrit) todella olla täsmälleen samat kuin delegaatilla? Vastaus: Ei, emme voi sivuuttaa kovarianssia ja käänteistä vaihtelua. Esitelläänpä lyhyesti kovariantin ja invertterin tieto.
"Kovarianssi" tarkoittaa kykyä käyttää tyyppiä, joka on johdettu enemmän kuin alun perin määritelty johdettu tyyppi. "Invertteri" tarkoittaa kykyä käyttää tyyppiä, jonka johdannaisaste on pienempi. Tällöin komissiomme on myös kovarianssin ja käänteisarvon alainen.
Tämä tarkoittaa, että jos delegaatti määritellään, ei ainoastaan täsmälleen sama allekirjoitusmenetelmä voi antaa arvoa delegaattimuuttujalle.
Jos metodin parametritaulu vastaa delegaatti-ilmoitustaulua, mutta palauttaa johdetun luokan (delegaatti-ilmoitus palauttaa tyypin), metodi voidaan myös liittää tähän delegaattimuuttujaan.
Jos metodin palautustyyppi vastaa delegaatin määrittelyä, mutta argumentti on delegaatti-ilmoitusparametrityypin alkuperäisluokka, metodi voidaan myös liittää delegaattimuuttujaan.
Jos metodin parametrit ja palautustyyppi vastaavat edellä mainittujen kahden rivin oletuksia, menetelmä voidaan myös liittää delegaattimuuttujaan.
Seuraava on yksinkertainen esimerkki kovarianttisesta vs. invertteristä:
Kovarianssi:
Invertteri:
|
Edellinen:MFC-suunnitteluSeuraava:Kuinka selvittää, mikä prosessi PID:ssä tiedosto on varattu
|