Цомпарисон Цхарт
Основа за поређење | Делегати | Догађаји |
---|---|---|
Басиц | Делегат држи референцу методе. | Догађај је претјерана слојевита апстракција која се даје делегатима. |
Синтакса | делегат ретурн_типе делегате_наме (параметер_лист); | евент_делегате евент_наме; |
Кључна реч | Делегат је проглашен помоћу кључне ријечи "делегат". | Догађај се проглашава помоћу кључне ријечи "догађај". |
Декларација | Делегат је проглашен изван било које класе. | Догађај је декларисан унутар класе. |
Инвоке | За позивање на метод мора се упутити делегату. | Да бисте позвали метод, он мора бити додељен догађају. |
Коваријанца и контравијанција | Они пружају флексибилност делегатима. | Нема таквог концепта. |
Евент Аццессор | Нема таквог концепта. | Управља листом руковаоца догађаја. |
Зависност | Делегати су независни од догађаја. | Догађај се не може креирати без делегата. |
Дефиниција делегата
У Ц # делегати се користе као показивач функције за упућивање методе. То је конкретно објекат који се односи на метод који му је додељен. Исти делегат се може користити за упућивање различитих метода, јер је способан да држи референцу различитих метода, али један по један. Која метода ће бити позвана од стране делегата одређује се у време извршавања. Синтакса декларисања делегата је следећа:
делегат ретурн_типе делегате_наме (параметер_лист);
Овде, ретурн_типе декларише тип вредности који се враћа методом, који се позива делегатом и делегате_име је име делегата. Параметар_лист дефинира листу параметара потребних методама које ће позвати делегат.
Постоје неке важне тачке које треба запамтити о делегатима. Може позвати било који метод који одговара његовом потпису и врсти повратка. Делегат може позвати методу инстанце или статичку методу. Ако позове метод инстанце, он треба да узме помоћ објекта да позове метод. Делегати подржавају мултицастинг, тј. Можете повезати методе које ће се аутоматски позивати када се позове делегат који се позива на њих. Једноставно морате да креирате делегатски објекат и доделите методе један за другим ланцу користећи "+ =" оператор. Методу можете уклонити и помоћу “- =” оператора.
Карактеристике које делегату додају додатну флексибилност су коваријанца и контравијанција. Цоварианце и Цонтраварианце дозвољавају услов у којем се тип повратка и потпис методе додијељене делегату разликују од типа делегата.
- Коваријанца вам омогућава да доделите методу делегату где је повратни тип методе класа која је изведена из класе која одређује тип повратка делегата.
- Цонтраварианце вам омогућава да доделите методу делегату где је тип параметра методе основна класа класе која је специфицирана као параметар делегата.
Дефиниција догађаја
Догађаји су извршена акција која мења стање објекта. Догађаји су проглашени делегатима, без присуства делегата не можете пријавити догађаје. Може се рећи да догађај обезбјеђује енкапсулацију делегатима. Постоје два важна састојка када се ради о догађајима који су догађај и догађај. Ако су објекти заинтересовани за догађај, онда региструје управљача догађаја за тај одређени догађај. И кад год се догађаји испуштају, позивају се регистровани руковаоци догађајима. Декларација догађаја је следећа:
евент_делегате евент_наме;
Овде, "догађај" је кључна реч која приказује декларацију догађаја. Даље, евент_делегате приказује име делегата који подржава догађај. Тада, евент_наме је име догађаја
Постоје неке важне тачке које треба запамтити док се бавите догађајима. Као и делегати, догађаји могу бити мултицаст тј. Више објеката који су везани (регистрирани) за руковатеља догађаја, реагују када је догађај подигнут. Руковаоци догађајима могу бити додани у ланац користећи оператора "+ =" и могу се уклонити помоћу оператора "- =" Оба статичка и инстанце метода могу се користити као руковаоци догађајима. Аццессор за догађај може вам дати контролу над имплементацијом листе руковатеља догађаја.
Интерфејс може да садржи догађаје. Догађаји такође могу бити апстрактни, док догађај заснован на приступу не може бити апстрактан. Догађај може бити виртуалан и бити надјачан изведеном класом.
Кључне разлике између делегата и догађаја у Ц #
- Делегат је објекат који се користи као показивач функције за држање референце методе. С друге стране, догађаји пружају апстракцију делегатима.
- Кључна реч која је потребна за декларисање делегата је делегат, док је кључна реч која је потребна за декларисање догађаја догађај .
- Делегат је декларисан изван класе, док је догађај декларисан унутар класе.
- Да бисте позвали метод помоћу делегатског објекта, метода мора бити упућена на објекат делегата. С друге стране, за позивање методе помоћу објекта догађаја, метода се мора позвати на објекат догађаја.
- Цоварианце и Цонтраварианце обезбеђују додатну флексибилност делегатским објектима. С друге стране, догађај нема такве концепте.
- Евент Аццессор управља листом руковаоца догађаја док делегат нема такав концепт.
- Делегати су неовисни о догађајима, али догађаји се не могу креирати без делегата.
Закључак:
Делегати су корисни јер подржавају догађаје и пружају могућност извршавања методе у току рада. Аццессор дозвољава нам да синхронизујемо руковатеље догађајима у мултитхреадинг апликацијама.