De ce avem nevoie de delegați în c #

Deci, cum se face acest lucru în C #? De exemplu, scrieți un calculator și aveți cea mai simplă logică:

Această soluție simplă și elegantă are dreptul la viață, dar are unele probleme:







  • Software-ul este schimbabil. Mâine va trebui să adăugați o captură pe modul și apoi va trebui să recompilați clasa. În anumite etape ale proiectului, aceasta nu este o plăcere scumpă pentru consumatorii din clasa ta.
  • Codul din formularul curent nu conține verificări de intrare. Dacă le adăugați, comutatorul creste indecent.

Ma Laasot. așa cum spun prietenii mei israelieni.

Mai întâi trebuie să încapsulați codul într-o funcție:

În al doilea rând, trebuie să scapi de comutator:

Ce am făcut? Am făcut definiția operațiilor de la cod la date - de la comutator la dicționar.

Un delegat este un obiect care indică o funcție. Sunând la un delegat, numim funcția pe care o indică. În acest caz, creăm un delegat pentru o funcție care are doi parametri dubli și o dublă creștere. În al doilea rând, creăm o mapare între simbolul de funcționare (+ - * /) și funcția sa.






Astfel, am rezolvat primul dezavantaj: lista de operațiuni poate fi modificată la discreția noastră.

Din nefericire, am avut un delegat inutil și o înregistrare a formei

nu la fel de clar ca

Începând cu C # 2.0, putem rezolva această problemă introducând metode anonime:

Aici, pentru adăugare și scădere, folosesc metode anonime, iar pentru multiplicare și divizare, metode complete. Dar încă prea multă apă.

C # 4.0 cu lambda vine la salvare:

Semnătura func este citită ca Func<тип первого аргумента, тип второго аргумента, тип результата>. Func în sine este același delegat, dar cu generice. Pe lângă comoditatea scrisului, Func acceptă atât metodele lambda, cât și metodele anonime, precum și metodele convenționale și totul sub o singură publicitate. Nu este surprinzător de confortabil?

Astfel, în C #, puteți scrie construcții elegante, tipizate cu puțină sau fără apă.

Haha tot felul de shags funky sunt întrebate?

Eu răspund: C # este un limbaj strict scris, care monitorizează cu strictețe că tipurile se potrivesc și nu cad în timpul runtime-ului. Pentru a încerca să atribuiți tipuri incorecte, acesta atinge mâinile când este compilat. Prin urmare, are nevoie de o indicație formală a tuturor tipurilor implicate.







Articole similare

Trimiteți-le prietenilor: