Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 20054|Atsakyti: 0

[Šaltinis] Greitai supraskite C# išplėstines sąvokas (1) Deleguokite delegavimą

[Kopijuoti nuorodą]
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 dizainas
Kitą:Kaip sužinoti, kuris procesas PID failas yra užimtas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com