Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20054|Răspunde: 0

[Sursă] Înțelegerea rapidă a conceptelor avansate C# (1) Delegarea delegării

[Copiază linkul]
Postat pe 19.01.2017 15:18:00 | | | |
Fac dezvoltare .NET de mult timp și recent am recenzat cartea "C# Advanced Programming". Am descoperit că multe probleme pe care păream să le înțeleg, dar pe care nu le înțelegeam, pot fi de fapt studiate și înțelese treptat.

Așadar, plănuiesc să încep să scriu o postare pe blog despre "Seria de Programare Avansată C#". Se va baza pe conceptul cărții "C# Advanced Programming" și va face referire și la postările de pe blog ale altor experți, sper că înțelegeți. Dacă este ceva în neregulă, vă rog să corectați.

(De asemenea: Această postare pe blog nu va explica elementele de bază ale definițiilor și gramaticii.) )



Să vorbim despre comisionare.

Delegate este folosit pe scară largă în .NET. Vor fi implicate expresii lambda, evenimente, metode de anonimat etc. (rămâneți pe aproape pentru postările viitoare pe blog).

Deci, ce este încredințarea?

În termeni simpli, delegații nu sunt diferiți de metodele de specificare, cu excepția faptului că trebuie să specifice cuvântul cheie delegat și nu au entitate de metodă. Poți să te gândești la asta ca la un înlocuitor, de exemplu, când scrii cod fără să știi cu ce te vei confrunta. Trebuie doar să știi ce tip de parametru și ce tip de ieșire vei introduce și să le definești. Aceasta este metoda transmisă în carte conform căreia semnătura trebuie să însemne același lucru.

Să definim o delegare de bază:





Rezultatele execuției:
Vezi locul practic de mai sus pentru a te încredința? Și anumeUn delegat poate executa orice metodă cu același tip de parametru de ingestie și același tip de return, sau chiar o coadă de metodă cu aceeași semnătură.

Deci, semnăturile noastre de metodă (adică parametrii de import și de ieșire) trebuie să fie exact aceleași ca ale delegatului? Răspuns: Nu, nu putem ignora covarianța și variația inversă.
Să introducem pe scurt cunoștințele despre covariant și invertor.

"Covarianță" înseamnă capacitatea de a folosi un tip mai derivat decât tipul derivat specificat inițial.
"Invertor" se referă la capacitatea de a folosi un tip cu un grad mai mic de derivație.
Apoi, comisionul nostru este supus și covarianței și inversei.

Aceasta înseamnă că, dacă un delegat este definit, nu doar aceeași metodă de semnătură poate atribui valoare variabilei delegate.
Dacă tabelul parametrilor unei metode corespunde declarației delegatului, dar returnează o clasă derivată a (declarația delegatului returnează tipul), atunci metoda poate fi atribuită și acestei variabile delegate.
Dacă tipul de returnare al unei metode corespunde declarației delegatului, dar argumentul este clasa ancestrală a tipului parametrului de declarație al delegatului, atunci metoda poate fi atribuită și variabilei delegate.
Dacă parametrii și tipul de returnare ale unei metode corespund presupunerilor din cele două linii de mai sus, atunci metoda poate fi atribuită și variabilei delegate.

Următorul este un exemplu simplu de covariant vs. invertor:

Covarianță:

Invertor:







Precedent:Designul MFC
Următor:Cum să afli în ce proces PID este ocupat un fișier
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com