亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

delegate vs event

2019-11-11 04:50:15
字體:
來源:轉載
供稿:網友

What are the differences between delegate and an event

An event declaration adds a layer of abstraction and PRotection on the delegate instance. This protection prevents clients of the delegate from resetting the delegate and its invocation list and only allows adding or removing targets from the invocation list. To understand the differences you can look at 2 examples below:

Example with Delegate

First let's try to implement an "event trigger" by using "delegate" instead of "event". in this case, the example delegate Run is an Action - that is a kind of delegate that doesn't return a value.

public class Animal{public Action Run {get; set;}public void RaiseEvent(){if (Run != null){Run();}}}

To use the delegate, you should do something like this:

Animal animal= new Animal();animal.Run += () => Console.WriteLine("I'm running");animal.Run += () => Console.WriteLine("I'm still running") ;animal.RaiseEvent();

This code works well but you could have some weak spots: For example, if I write this:

animal.Run += () => Console.WriteLine("I'm running");animal.Run += () => Console.WriteLine("I'm still running");animal.Run = () => Console.WriteLine("I'm sleeping") ;

with the last line of code, I have overridden the previous behaviors just with one missing + (I have used = instead of +=)

Another weak spot is that every class which uses your Animal class can raise the Run event without calling the public RaiseEvent function, but with code snippet like:

if (animal.Run != null){   animal.Run();}

To avoid these weak spots you can use events in c#.

Example with Event

Your "event version" of the Animal class will looks like:

public class ArgsSpecial : EventArgs{    public ArgsSpecial (string val)    {        Operation=val;    }    public string Operation {get; set;}} public class Animal{    // Empty delegate. In this way you are sure that value is always != null     // because no one outside of the class can change it.    public event EventHandler<ArgsSpecial> Run = delegate{};    public void RaiseEvent()    {           Run(this, new ArgsSpecial("Run faster"));    }}

to call events

 Animal animal= new Animal(); animal.Run += (sender, e) => Console.WriteLine("I'm running. My value is {0}", e.Operation); animal.RaiseEvent();

Differences:

1. You aren't using a public property but a public field. Using events, the compiler protects your fields from unwanted access 2. Event can't be assigned directly. In this case, it is impossible to override the previous behaviors by using = instead of +=. 3. No one outside of your class can raise the event. Even the Run event is public, a compiler error will occur if someone tries to raise the event with code snippet below:

// Error: the event 'delegateEvent.Animal.Run' can only appear on the left hand side of += or -= // (except when used from within the type 'delegateEvent.Animal')animal.Run(animal, new ArgsSpecial("Run slower"));

4. Event can be included in an interface declaration, whereas a delegate field cannot.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久全球大尺度高清视频| 国产精品久久久久91| 亚洲国产福利在线| 日韩动漫免费观看电视剧高清| 国产一区二区在线免费| 国产精品三级在线| 国产精品狼人色视频一区| 最近2019中文字幕一页二页| 欧美日韩亚洲网| 久久九九亚洲综合| 国产国语videosex另类| 日韩中文字幕在线视频播放| 欧美xxxx14xxxxx性爽| 疯狂蹂躏欧美一区二区精品| 在线观看日韩av| 国产精品成人一区二区| 国产成人精品久久二区二区91| 日韩第一页在线| 日韩最新中文字幕电影免费看| 亚洲欧美另类自拍| 国产日本欧美一区二区三区在线| 欧美激情在线狂野欧美精品| 亚洲色图第一页| 日韩福利视频在线观看| 欧美日韩国产精品| 亚洲视频国产视频| 日韩欧美中文字幕在线观看| 97超级碰碰人国产在线观看| 日韩视频免费中文字幕| 国产精品视频不卡| 一区二区三区在线播放欧美| 国产精品户外野外| 最近2019年中文视频免费在线观看| 性欧美xxxx交| 日韩有码片在线观看| 国产精品视频最多的网站| 欧美壮男野外gaytube| 亚洲第一国产精品| 亚洲第一区在线| 日韩视频在线观看免费| 国产日韩av在线| 欧美中文字幕在线观看| 日本三级久久久| 91福利视频在线观看| 久久久中文字幕| 91久久中文字幕| 亚洲a在线播放| 日本高清视频精品| 欧美日韩国产第一页| 国产精品久久婷婷六月丁香| 色老头一区二区三区在线观看| 亚洲高清免费观看高清完整版| 中文字幕9999| 97国产在线视频| 久久久久久久999| 日韩一区二区av| 国产精品成av人在线视午夜片| 久久精品青青大伊人av| 亚洲区中文字幕| 亚洲精品国产精品国产自| 亚洲奶大毛多的老太婆| 亚洲国产成人精品久久久国产成人一区| 亚洲人成在线观看| 欧美午夜无遮挡| 欧美亚洲国产视频小说| 国产mv免费观看入口亚洲| 国产成人一区二区| 91在线观看免费高清完整版在线观看| 日韩精品视频免费在线观看| 不卡在线观看电视剧完整版| 国产视频综合在线| 欧美极品欧美精品欧美视频| 精品国产视频在线| 久久激情视频免费观看| 91影视免费在线观看| 国产精品揄拍一区二区| 亚洲成人激情在线观看| 亚洲精品欧美日韩专区| 国产精品h片在线播放| 精品偷拍一区二区三区在线看| 亚洲人成电影网站色| 精品成人国产在线观看男人呻吟| 国产99久久精品一区二区永久免费| 综合网中文字幕| 欧美日韩国产综合视频在线观看中文| 久久久久久97| 成人女保姆的销魂服务| 国产精品久久久久久久久久久不卡| 日韩免费观看在线观看| 97欧美精品一区二区三区| 久久精品国产精品| 正在播放欧美视频| 91精品国产乱码久久久久久久久| 欧美电影在线观看网站| 欧美性色视频在线| 九九热这里只有精品6| 国产精品伦子伦免费视频| 亚洲影院高清在线| 亚洲精品日韩欧美| 日韩激情第一页| 国产不卡视频在线| 欧美激情乱人伦| 亚洲欧美色图片| www.欧美免费| 亚洲激情成人网| 青草成人免费视频| 在线精品视频视频中文字幕| 91免费看视频.| 国产精品久久久久久久久免费看| 国产精品观看在线亚洲人成网| 青草热久免费精品视频| 在线中文字幕日韩| 欧美另类69精品久久久久9999| 97精品伊人久久久大香线蕉| 欧美xxxx18国产| 国产精品久久久久一区二区| 日韩免费在线播放| 色播久久人人爽人人爽人人片视av| 2021久久精品国产99国产精品| 高清亚洲成在人网站天堂| 欧美成人网在线| 中文字幕精品一区久久久久| 国产精品久久久久久久久久久久| 欧美国产日韩一区二区在线观看| 国产精品偷伦免费视频观看的| 日本在线观看天堂男亚洲| 久久国产视频网站| 国产一区二区三区高清在线观看| 亚洲精品自拍第一页| 精品久久香蕉国产线看观看gif| 91精品久久久久久久久青青| 日韩中文字幕欧美| 欧美精品18videosex性欧美| 亚洲自拍偷拍一区| 岛国av一区二区在线在线观看| 国产精品视频精品| 亚洲视频在线观看免费| 国产狼人综合免费视频| 2023亚洲男人天堂| 国产97在线|日韩| 国语自产精品视频在线看抢先版图片| 亚洲欧美中文日韩v在线观看| 欧美日韩性视频| 久久久亚洲成人| 2019中文字幕在线观看| 色偷偷噜噜噜亚洲男人| 欧美激情免费观看| 欧美在线一区二区三区四| 日韩在线中文字幕| 在线精品国产欧美| 亚洲欧美三级在线| 国产午夜精品理论片a级探花| 国产在线精品一区免费香蕉| 中文字幕亚洲一区| 国产精品一香蕉国产线看观看| 国产欧美精品xxxx另类| 欧美日韩免费一区| 精品成人乱色一区二区| 亚洲欧美日韩精品久久| 久久国产精彩视频| 国产精品视频一区二区三区四| 裸体女人亚洲精品一区| 日韩**中文字幕毛片| 亚洲精品国产拍免费91在线|