Diagramă de comparație
Bazele comparației | Delegații | Evenimente |
---|---|---|
De bază | Un delegat deține referința unei metode. | Evenimentul este o abstractizare suprapusă, oferită delegațiilor. |
Sintaxă | delegați return_type delegate_name (parametrul_list); | eveniment event_delegate nume_aplicație; |
cuvinte cheie | Un delegat este declarat folosind un cuvânt cheie "delegat". | Un eveniment este declarat folosind un cuvânt cheie "eveniment". |
Declaraţie | Un delegat este declarat în afara oricărei clase. | Un eveniment este declarat în interiorul unei clase. |
Invoca | Pentru a invoca o metodă, el trebuie să fie trimis la delegat. | Pentru a invoca o metodă, trebuie atribuită evenimentului. |
Covariance și Contravariance | Ele oferă flexibilitate delegaților. | Nu există un astfel de concept. |
Eveniment Accesor | Nu există un astfel de concept. | Gestionează lista operatorilor de evenimente. |
Dependenţă | Delegatele sunt independente de evenimente. | Evenimentul nu poate fi creat fără delegați. |
Definiția Delegates
În C # delegații sunt folosiți ca un indicator al funcției pentru a indica o metodă. Este în mod specific un obiect care se referă la o metodă care îi este atribuită. Același delegat poate fi folosit pentru a se referi la diferite metode, deoarece este capabil să dețină referința unor metode diferite, dar una câte una. Ce metodă va fi invocată de delegat este determinată la timpul de rulare. Sintaxa de declarare a unui delegat este după cum urmează:
delegați return_type delegate_name (parametrul_list);
Aici, return_type declară tipul de valoare returnat de metodă, care se numește de delegat și delegate_name este numele delegatului. Parametrul_list definește lista parametrilor ceruți de metodele care vor fi solicitate de către delegat.
Există câteva puncte importante care trebuie reamintite despre delegați. Poate apela orice metodă care corespunde semnăturii și tipului de returnare. Un delegat poate apela atât o metodă de instanță, fie o metodă statică. Dacă aceasta numește o metodă de instanță, trebuie să ia ajutorul obiectului pentru a invoca metoda. Delegatii sustin multicasting, de exemplu, puteti inlatura metodele care vor fi automat apelate atunci cand delegatul care le face referire este invocat. Pur și simplu trebuie să creați un obiect delegat și să atribuiți lanțului metodele una după alta folosind operatorul "+ =". De asemenea, puteți dezactiva o metodă folosind operatorul "- =".
Caracteristicile care adaugă o mai mare flexibilitate delegatului sunt Covariance și Contravariance. Covariance și Contravariance permit condiția în care tipul returnării și semnătura metodei atribuite delegatului sunt diferite de cele ale delegatului.
- Covariance vă permite să atribuiți o metodă delegaților în cazul în care tipul de retur al metodei este o clasă derivată din clasa care specifică tipul de returnare al delegatului.
- Contravariance vă permite să atribuiți o metodă delegaților în cazul în care tipul de parametru al metodei este o clasă de bază a clasei care este specificată ca parametru al delegatului.
Definiția evenimentelor
Evenimentele sunt acțiunea efectuată care schimbă starea unui obiect. Evenimentele sunt declarate folosind delegați, fără prezența delegațiilor pe care nu le puteți declara evenimente. Puteți spune că un eveniment oferă încapsularea pentru delegați. Există doi compuși importanți atunci când se ocupă de evenimente care sunt eveniment și eveniment de manipulare. Dacă obiectele sunt interesate de eveniment, atunci acesta înregistrează un manipulator de eveniment pentru evenimentul respectiv. Și ori de câte ori evenimentele sunt declanșate, agenții de înregistrare a evenimentului sunt chemați. Declarația evenimentului este după cum urmează:
eveniment event_delegate nume_aplicație;
Aici, "eveniment" este un cuvânt cheie care arată declarația unui eveniment. Apoi, event_delegate afișează numele delegatului care susține evenimentul. Apoi, event_name este numele evenimentului
Există câteva puncte importante care trebuie amintite în timp ce se ocupă de evenimente. Ca și delegații, evenimentele pot fi, de asemenea, multicast, adică mai multe obiecte care sunt înlănțuite (înregistrate) unui manipulator de evenimente, răspund atunci când un eveniment este ridicat. Manipulatorii de evenimente pot fi adăugați la lanț folosind operatorul "+ =" și pot fi deschiși folosind operatorul "- =" Metoda statică și instanță pot fi folosite ca manipulator de evenimente. Accesul la eveniment vă poate oferi controlul asupra implementării listei de gestionare a evenimentelor.
Interfața poate conține evenimente. Evenimentele pot fi de asemenea abstracte, în timp ce evenimentul bazat pe accessor nu poate fi abstract. Evenimentul poate fi virtual și poate fi suprascris de clasa derivată.
Diferențele cheie între delegați și evenimente în C #
- Delegatul este un obiect folosit ca indicator al funcției pentru a menține referința unei metode. Pe de altă parte, evenimentele oferă o abstractizare delegaților.
- Un cuvânt cheie necesar pentru a declara un delegat este un delegat, în timp ce un cuvânt cheie necesar pentru a declara un eveniment este un eveniment .
- Un delegat este declarat în afara unei clase, în timp ce un eveniment este declarat în interiorul unei clase.
- Pentru a invoca o metodă care utilizează un obiect delegat, metoda trebuie să fie adresată obiectului delegat. Pe de altă parte, pentru a invoca o metodă care utilizează un obiect de eveniment, metoda trebuie să fie referită la obiectul evenimentului.
- Covariance și Contravariance oferă o flexibilitate suplimentară obiectelor delegate. Pe de altă parte, evenimentul nu are astfel de concepte.
- Event Accessor gestionează lista de operatori de evenimente, în timp ce delegatul nu are un astfel de concept.
- Delegatii sunt independenti de evenimente, dar evenimentele nu pot fi create fara delegat.
Concluzie:
Delegații sunt utile deoarece susțin evenimente și oferă facilitatea de executare a metodei în timpul rulării. Accesul la eveniment ne permite să sincronizăm agenții de procesare a evenimentelor în aplicațiile multithreading.