Рецоммендед, 2024

Избор Уредника

Разлика између делегата и догађаја у Ц #

и делегати и догађаји играју важну улогу у програму вођеном догађајима. Делегати се могу позвати на метод, а веома је сличан показивачу функције у Ц ++. Догађаји обавештавају да је извршена нека акција. Основна разлика између делегата и догађаја је у томе што делегати држе референцу метода, а догађај пружа начин приступа том методу користећи делегате.

Цомпарисон Цхарт

Основа за поређењеДелегатиДогађаји
БасицДелегат држи референцу методе.Догађај је претјерана слојевита апстракција која се даје делегатима.
Синтаксаделегат ретурн_типе делегате_наме (параметер_лист);евент_делегате евент_наме;
Кључна речДелегат је проглашен помоћу кључне ријечи "делегат".Догађај се проглашава помоћу кључне ријечи "догађај".
ДекларацијаДелегат је проглашен изван било које класе.Догађај је декларисан унутар класе.
ИнвокеЗа позивање на метод мора се упутити делегату.Да бисте позвали метод, он мора бити додељен догађају.
Коваријанца и контравијанцијаОни пружају флексибилност делегатима.Нема таквог концепта.
Евент АццессорНема таквог концепта.Управља листом руковаоца догађаја.
ЗависностДелегати су независни од догађаја.Догађај се не може креирати без делегата.

Дефиниција делегата

У Ц # делегати се користе као показивач функције за упућивање методе. То је конкретно објекат који се односи на метод који му је додељен. Исти делегат се може користити за упућивање различитих метода, јер је способан да држи референцу различитих метода, али један по један. Која метода ће бити позвана од стране делегата одређује се у време извршавања. Синтакса декларисања делегата је следећа:

 делегат ретурн_типе делегате_наме (параметер_лист); 

Овде, ретурн_типе декларише тип вредности који се враћа методом, који се позива делегатом и делегате_име је име делегата. Параметар_лист дефинира листу параметара потребних методама које ће позвати делегат.

Постоје неке важне тачке које треба запамтити о делегатима. Може позвати било који метод који одговара његовом потпису и врсти повратка. Делегат може позвати методу инстанце или статичку методу. Ако позове метод инстанце, он треба да узме помоћ објекта да позове метод. Делегати подржавају мултицастинг, тј. Можете повезати методе које ће се аутоматски позивати када се позове делегат који се позива на њих. Једноставно морате да креирате делегатски објекат и доделите методе један за другим ланцу користећи "+ =" оператор. Методу можете уклонити и помоћу “- =” оператора.

Карактеристике које делегату додају додатну флексибилност су коваријанца и контравијанција. Цоварианце и Цонтраварианце дозвољавају услов у којем се тип повратка и потпис методе додијељене делегату разликују од типа делегата.

  • Коваријанца вам омогућава да доделите методу делегату где је повратни тип методе класа која је изведена из класе која одређује тип повратка делегата.
  • Цонтраварианце вам омогућава да доделите методу делегату где је тип параметра методе основна класа класе која је специфицирана као параметар делегата.

Дефиниција догађаја

Догађаји су извршена акција која мења стање објекта. Догађаји су проглашени делегатима, без присуства делегата не можете пријавити догађаје. Може се рећи да догађај обезбјеђује енкапсулацију делегатима. Постоје два важна састојка када се ради о догађајима који су догађај и догађај. Ако су објекти заинтересовани за догађај, онда региструје управљача догађаја за тај одређени догађај. И кад год се догађаји испуштају, позивају се регистровани руковаоци догађајима. Декларација догађаја је следећа:

 евент_делегате евент_наме; 

Овде, "догађај" је кључна реч која приказује декларацију догађаја. Даље, евент_делегате приказује име делегата који подржава догађај. Тада, евент_наме је име догађаја

Постоје неке важне тачке које треба запамтити док се бавите догађајима. Као и делегати, догађаји могу бити мултицаст тј. Више објеката који су везани (регистрирани) за руковатеља догађаја, реагују када је догађај подигнут. Руковаоци догађајима могу бити додани у ланац користећи оператора "+ =" и могу се уклонити помоћу оператора "- =" Оба статичка и инстанце метода могу се користити као руковаоци догађајима. Аццессор за догађај може вам дати контролу над имплементацијом листе руковатеља догађаја.

Интерфејс може да садржи догађаје. Догађаји такође могу бити апстрактни, док догађај заснован на приступу не може бити апстрактан. Догађај може бити виртуалан и бити надјачан изведеном класом.

Кључне разлике између делегата и догађаја у Ц #

  1. Делегат је објекат који се користи као показивач функције за држање референце методе. С друге стране, догађаји пружају апстракцију делегатима.
  2. Кључна реч која је потребна за декларисање делегата је делегат, док је кључна реч која је потребна за декларисање догађаја догађај .
  3. Делегат је декларисан изван класе, док је догађај декларисан унутар класе.
  4. Да бисте позвали метод помоћу делегатског објекта, метода мора бити упућена на објекат делегата. С друге стране, за позивање методе помоћу објекта догађаја, метода се мора позвати на објекат догађаја.
  5. Цоварианце и Цонтраварианце обезбеђују додатну флексибилност делегатским објектима. С друге стране, догађај нема такве концепте.
  6. Евент Аццессор управља листом руковаоца догађаја док делегат нема такав концепт.
  7. Делегати су неовисни о догађајима, али догађаји се не могу креирати без делегата.

Закључак:

Делегати су корисни јер подржавају догађаје и пружају могућност извршавања методе у току рада. Аццессор дозвољава нам да синхронизујемо руковатеље догађајима у мултитхреадинг апликацијама.

Top