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

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

delegate vs event

2019-11-11 05:38:18
字體:
來源:轉載
供稿:網友

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.



下一篇:poj 1661

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产成人爱av在线播放| 成人字幕网zmw| 亚洲色图13p| 在线精品高清中文字幕| 欧美亚洲成人免费| 精品久久久国产精品999| 91精品免费视频| 国产精品青草久久久久福利99| 欧美亚洲另类视频| 国产伦精品免费视频| 国产精品免费视频xxxx| 欧美性理论片在线观看片免费| 91国自产精品中文字幕亚洲| 国内精品视频一区| 亚洲日韩中文字幕在线播放| 欧美有码在线观看视频| 午夜精品久久久久久久99黑人| 久久在线精品视频| 欧美性猛交xxxx富婆| 亚洲理论片在线观看| 国产精自产拍久久久久久蜜| 91在线无精精品一区二区| 羞羞色国产精品| 国产有码在线一区二区视频| 亚洲国产精品字幕| 国产精品久久久久久久久久免费| 欧美裸体xxxxx| 日韩av网址在线| 亚洲国产成人精品久久| 亚洲一区二区免费在线| 成人激情视频网| 色妞一区二区三区| 久久99精品国产99久久6尤物| 精品久久久久久久久久ntr影视| 亚洲人成电影网站| 美日韩精品视频免费看| 3344国产精品免费看| 日韩中文字幕视频在线| 国产精品嫩草影院一区二区| 国产小视频国产精品| 日韩国产高清污视频在线观看| 亚洲一区二区免费| 国产丝袜精品第一页| 亚洲精品国产精品国自产观看浪潮| 亚洲第一区在线| 69久久夜色精品国产7777| 国产美女精彩久久| 色视频www在线播放国产成人| 国产suv精品一区二区三区88区| 日韩在线观看免费全集电视剧网站| 久久精品一偷一偷国产| 亚洲第一页中文字幕| 日本成熟性欧美| 国产精品久久视频| 国产日韩欧美综合| 中文字幕日韩av电影| 亚洲国语精品自产拍在线观看| 日韩av三级在线观看| 亚洲精品国产精品久久清纯直播| 国产精品爽爽ⅴa在线观看| 国产婷婷97碰碰久久人人蜜臀| 亚洲人成在线电影| 亚洲一区二区三区成人在线视频精品| 性亚洲最疯狂xxxx高清| 国产日韩在线精品av| 亚洲片av在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩va亚洲va欧洲va国产| 成人av色在线观看| 精品久久久999| 精品国产老师黑色丝袜高跟鞋| 色系列之999| 亚洲欧美日韩精品久久亚洲区| 久久精品99无色码中文字幕| 亚洲免费人成在线视频观看| 国产精品手机播放| 久久亚洲欧美日韩精品专区| 91视频88av| 欧美大片在线看免费观看| 国产91精品黑色丝袜高跟鞋| 波霸ol色综合久久| 久久久av网站| 国产成人精品一区二区| 久久久久久久国产精品| 国产日韩在线观看av| 91精品久久久久久久久不口人| 国产成人精品免高潮费视频| 搡老女人一区二区三区视频tv| 亚洲精品美女在线观看播放| 亚洲人成网在线播放| 色综合伊人色综合网站| 亚洲肉体裸体xxxx137| 国产性猛交xxxx免费看久久| 国产精品中文在线| 欧美精品国产精品日韩精品| 日本伊人精品一区二区三区介绍| 亚洲天堂精品在线| 草民午夜欧美限制a级福利片| 日韩国产激情在线| 欧美在线一区二区视频| 日韩精品视频中文在线观看| 日韩av一区二区在线观看| 日韩中文字幕第一页| 国产精品自产拍在线观看中文| 一区二区三区四区视频| 久久久黄色av| 伊人亚洲福利一区二区三区| 揄拍成人国产精品视频| 色婷婷综合久久久久中文字幕1| 中文字幕在线成人| 91美女片黄在线观看游戏| 欧美大秀在线观看| 国产欧美日韩中文字幕| 久久影视电视剧免费网站清宫辞电视| 国产精品综合不卡av| 91干在线观看| y97精品国产97久久久久久| 欧美wwwxxxx| 91av免费观看91av精品在线| 国产成人高清激情视频在线观看| 日韩不卡中文字幕| 亚洲xxxx视频| 久久久亚洲网站| 国产日韩在线观看av| 欧美成人精品一区二区三区| 丁香五六月婷婷久久激情| 欧美精品成人91久久久久久久| 国产精品成av人在线视午夜片| 久久久国产精品x99av| 成人av在线网址| 精品日本高清在线播放| 久久久久久香蕉网| 国产欧美日韩视频| 久久久久久久av| 亚洲国产欧美日韩精品| 日韩精品在线观看网站| 中文字幕自拍vr一区二区三区| 亚洲色图av在线| 欧美日韩激情美女| 日韩av电影在线网| 亚洲综合在线中文字幕| 国产精品一二三视频| 精品欧美一区二区三区| 国产精品视频播放| 日韩精品在线视频观看| 日韩在线中文字幕| 国产精品久久久久久久7电影| 日韩黄色av网站| 国产欧美日韩丝袜精品一区| 91视频国产精品| www.日韩av.com| 自拍偷拍亚洲在线| 日韩欧美在线看| 欧美性猛交xxxx久久久| 精品久久久久久久久久| 北条麻妃在线一区二区| 久久在精品线影院精品国产| 日本一区二区在线免费播放| 伊人久久男人天堂| 青青青国产精品一区二区| 欧美亚洲视频在线看网址| 久久99久久99精品中文字幕| 国产aⅴ夜夜欢一区二区三区| 亲爱的老师9免费观看全集电视剧|