Palyginimo diagrama
Palyginimo pagrindas | Delegatai | Renginiai |
---|---|---|
Pagrindinis | Delegatas turi metodo nuorodą. | Renginys yra pernelyg daugiasluoksnė abstrakcija, teikiama delegatams. |
Sintaksė | deleguoti Return_type delegate_name (parametras_list); | įvykio_delegatas įvykio_pavadinimas; |
Raktinis žodis | Delegatas deklaruojamas naudojant raktinį žodį „delegatas“. | Įvykis paskelbiamas naudojant raktinį žodį „įvykis“. |
Deklaracija | Delegatas yra paskelbtas už bet kurios klasės. | Įvykis skelbiamas klasės viduje. |
Praleisti | Norint pasinaudoti metodu, jis turi būti perduotas delegatui. | Norėdami naudoti metodą, kurį reikia priskirti įvykiui. |
Kovariacija ir kontracepcija | Jie suteikia lankstumo delegatams. | Nėra tokios koncepcijos. |
Įvykio prieigos priemonė | Nėra tokios koncepcijos. | Valdo įvykių tvarkytojų sąrašą. |
Priklausomybė | Delegatai yra nepriklausomi nuo įvykių. | Renginys negali būti sukurtas be delegatų. |
Delegatų apibrėžimas
C # delegatai naudojami kaip funkcijų rodyklė metodui perduoti. Būtent tai objektas, kuris nurodo jam priskirtą metodą. Tas pats delegatas gali būti naudojamas skirtingiems metodams nurodyti, nes jis gali laikyti skirtingų metodų nuorodas, bet vienu metu. Kuris metodas bus naudojamas įgaliotojo nustatytu laiku. Delegato deklaravimo sintaksė yra tokia:
deleguoti Return_type delegate_name (parametras_list);
Čia sugrįžimo tipas nurodo, kokio tipo vertę grąžina metodas, kurį paskiria delegatas, o deleguotojo vardas yra delegato vardas. Parametrų sąraše apibrėžiamas parametrų, reikalingų metodais, kuriuos paskambins delegatas, sąrašas.
Yra keletas svarbių dalykų, kuriuos reikia prisiminti apie delegatus. Jis gali skambinti bet kuriuo metodu, kuris atitinka jo parašą ir grąžinimo tipą. Delegatas gali iškviesti ir egzemplioriaus metodą, arba statinį metodą. Jei jis kviečia egzemplioriaus metodą, jis turi imtis objekto pagalbos, kad galėtų pasinaudoti šiuo metodu. Delegatai palaiko daugialypį siuntimą, ty galite susieti metodus, kurie bus automatiškai kviečiami, kai bus kreipiamasi į juos nurodantį delegatą. Jūs tiesiog turite sukurti delegato objektą ir paskirti metodus vieną po kito grandinei naudodami operatorių „+ =“. Taip pat galite išjungti metodą naudodami „- =“ operatorių.
Funkcijos, kurios suteikia papildomą lankstumą delegatui, yra kovariacija ir kontracepcija. Kovariacija ir kontracepcija leidžia sąlygą, kai grįžimo tipas ir deleguotajam paskirtas metodas skiriasi nuo deleguotojo.
- Kovarijus leidžia jums priskirti metodą delegatui, kai metodo grąžinimo tipas yra klasė, kuri yra gauta iš klasės, nurodančios delegato grąžinimo tipą.
- Contravariance leidžia jums priskirti metodą delegatui, kai metodo parametro tipas yra bazinės klasės klasė, kuri yra nurodyta kaip delegato parametras.
Renginių apibrėžimas
Renginiai - tai veiksmas, kuris pakeičia objekto būseną. Renginiai paskelbiami naudodamiesi delegatais, nedalyvaujant delegatams, negalite deklaruoti įvykių. Galima sakyti, kad įvykis suteikia kapsulę delegatams. Yra du svarbūs junginiai, susiję su įvykiais ir įvykių tvarkytojais. Jei objektas domina įvykį, tada jis registruoja įvykio tvarkytoją tam tikram įvykiui. Ir kai įvykiai bus atleisti, registruojami įvykių tvarkytojai vadinami. Renginio deklaracija yra tokia:
įvykio_delegatas įvykio_pavadinimas;
Čia „įvykis“ yra raktinis žodis, rodantis įvykio deklaraciją. Tada event_delegate parodo delegato, palaikančio įvykį, pavadinimą. Tada įvykio pavadinimas yra įvykio pavadinimas
Yra keletas svarbių dalykų, kuriuos reikia prisiminti rengiant įvykius. Kaip ir delegatai, įvykiai taip pat gali būti daugiaadresiai, ty kelis objektus, kurie yra sukabinti (užregistruoti) į įvykių tvarkytoją, reaguoja, kai įvykis yra iškeltas. Renginių tvarkytojai gali būti įtraukti į grandinę naudodami operatorių „+ =“ ir gali būti nepažymėti naudojant „- =“ operatorių. Renginio dalyvis gali jums suteikti galimybę kontroliuoti įvykių tvarkytojo sąrašo įgyvendinimą.
Sąsajoje gali būti įvykių. Renginiai taip pat gali būti abstraktūs, o prieigos prie renginio įvykis negali būti abstraktus. Renginys gali būti virtualus ir gali būti pakeistas išvestine klase.
Pagrindiniai skirtumai tarp delegatų ir įvykių C #
- Delegatas yra objektas, naudojamas kaip funkcijų rodyklė metodo nuorodai laikyti. Kita vertus, renginiai suteikia abstrakciją delegatams.
- Raktinis žodis, kurio reikia deklaruoti delegatą, yra delegatas, o raktinis žodis, reikalingas įvykiui deklaruoti, yra įvykis .
- Delegatas paskelbiamas už klasės ribų, o įvykis yra paskelbtas klasėje.
- Jei norite naudoti metodą naudodamiesi deleguotuoju objektu, metodas turi būti nukreiptas į delegato objektą. Kita vertus, norint naudoti metodą naudojant įvykio objektą, metodas turi būti nukreiptas į įvykio objektą.
- Covariance ir Contravariance suteikia papildomą lankstumą deleguotiems objektams. Kita vertus, renginys neturi tokių sąvokų.
- „Event Accessor“ tvarko įvykių tvarkytojų sąrašą, o delegatas neturi tokios sąvokos.
- Delegatai yra nepriklausomi nuo įvykių, tačiau įvykiai negali būti sukurti be delegato.
Išvada:
Delegatai yra naudingi, nes jie palaiko įvykius ir suteikia galimybę vykdyti metodą vykdymo metu. Įvykio prieigos priemonė leidžia sinchronizuoti įvykių tvarkytojus daugialypės programos programose.