|
|
Paskelbta 2017-01-19 15:18:00
|
|
|
|

Ilgą laiką užsiimu .NET kūrimu ir neseniai peržiūrėjau knygą "C# Advanced Programming". Pastebėjau, kad daugelis problemų, kurias kažkada supratau, bet nesupratau, iš tikrųjų gali būti lėtai tiriamos ir suprantamos.
Taigi, planuoju pradėti rašyti tinklaraščio įrašą apie "C# Advanced Programming Series". Jame bus remiamasi knygos "C# Advanced Programming" koncepcija, taip pat bus remiamasi kitų ekspertų tinklaraščio įrašais, tikiuosi, kad suprantate. Jei kažkas negerai, pataisykite.
(Be to: Šiame tinklaraščio įraše nebus paaiškinti apibrėžimų ir gramatikos pagrindai.) )
Pakalbėkime apie paleidimą.
Delegatas plačiai naudojamas .NET. Lambda išraiškos, įvykiai, anonimiškumo metodai ir kt. bus įtraukti (sekite naujienas dėl tolesnių tinklaraščio įrašų).
Taigi, kas yra pavedimas?
Paprastais žodžiais tariant, atstovai nesiskiria nuo metodų nurodymo, išskyrus tai, kad jie turi nurodyti atstovo raktažodį ir neturi metodo objekto. Galite galvoti apie tai kaip apie vietos rezervavimo ženklą, pavyzdžiui, kai rašote kodą nežinodami, su kuo susidursite. Jums tereikia žinoti, koks yra parametro tipas ir išvesties tipas, kurį ketinate pristatyti, ir jį apibrėžti. Tai yra knygoje perteiktas metodas, kad parašas turi reikšti tą patį.
Apibrėžkime pagrindinį delegavimą:
Vykdymo rezultatai:
Ar matote aukščiau pateiktą praktinę vietą, kurią galėtumėte patikėti? BūtentAtstovas gali vykdyti bet kokį metodą su tuo pačiu įtraukimo parametro tipu ir grąžinimo tipu arba net metodų eilę su tuo pačiu parašu.
Taigi ar mūsų metodo parašai (t.y. importo ir išvesties parametrai) tikrai turi būti lygiai tokie patys kaip delegato? Atsakymas: Ne, mes negalime ignoruoti kovariacijos ir atvirkštinės variacijos. Trumpai supažindinkime su kovarianto ir keitiklio žiniomis.
"Kovariacija" reiškia galimybę naudoti tipą, kuris yra labiau išvestinis nei iš pradžių nurodytas išvestinis tipas. "Inverteris" reiškia galimybę naudoti tipą su mažesniu išvedimo laipsniu. Tada mūsų komisiniai taip pat priklauso nuo kovariacijos ir atvirkštinės.
Tai reiškia, kad jei delegatas yra apibrėžtas, ne tik tas pats parašo metodas gali priskirti reikšmę atstovo kintamajam.
Jei metodo parametrų lentelė atitinka atstovo deklaraciją, bet pateikia išvestinę klasę (atstovo deklaracija grąžina tipą), metodą taip pat galima priskirti šiam atstovo kintamajam.
Jei metodo grąžinimo tipas atitinka atstovo deklaraciją, bet argumentas yra atstovo deklaracijos parametro tipo pirminė klasė, metodą taip pat galima priskirti atstovo kintamajam.
Jei metodo parametrai ir grąžinimo tipas atitinka prielaidas aukščiau pateiktose dviejose eilutėse, metodą taip pat galima priskirti delegato kintamajam.
Toliau pateikiamas paprastas kovarianto ir keitiklio pavyzdys:
Kovariacija:
Inverteris:
|
Ankstesnis:MFC dizainasKitą:Kaip sužinoti, kuris procesas PID failas yra užimtas
|