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

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

delegate vs event

2019-11-11 04:08:36
字體:
來源:轉載
供稿:網友

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
亚洲一区二区三区视频| 欧美日韩性视频在线| 久青草国产97香蕉在线视频| 最近2019年手机中文字幕| 亚洲美女精品成人在线视频| 亚洲精品一区二区网址| 欧美日韩国产综合视频在线观看中文| 日本高清不卡在线| 亚洲理论在线a中文字幕| 欧美性xxxxx极品娇小| 亚洲欧美国产一区二区三区| 91免费精品视频| 日av在线播放中文不卡| 久久免费视频网| 国产精品日韩欧美| 亚洲精品456在线播放狼人| 狠狠综合久久av一区二区小说| 91中文精品字幕在线视频| 亚洲电影免费在线观看| 精品少妇一区二区30p| 久久久久久久久电影| 911国产网站尤物在线观看| 久久伊人色综合| 97在线日本国产| 亚洲xxxx18| 国产成人亚洲综合91精品| 亚洲成人三级在线| 91网站在线免费观看| 亚洲成人亚洲激情| 国产一区二区三区四区福利| 欧美日韩亚洲成人| 久久久久亚洲精品成人网小说| 26uuu亚洲伊人春色| 成人妇女免费播放久久久| 91精品久久久久久久久久入口| 国产成一区二区| 成人免费网站在线观看| 国产精品视频内| 日韩av手机在线观看| 亚洲午夜精品久久久久久久久久久久| 精品久久久视频| 欲色天天网综合久久| 狠狠躁夜夜躁久久躁别揉| 91久久久精品| 视频在线观看一区二区| 97视频免费在线观看| 久久成年人视频| 国产精品99久久久久久www| 欧美精品福利在线| 久久久免费精品| 国产欧美精品日韩精品| 国产一区二区三区直播精品电影| 久久不射热爱视频精品| 国产精品美女www爽爽爽视频| 中文字幕视频一区二区在线有码| 91精品国产777在线观看| 欧美高清在线视频观看不卡| 国产精品精品久久久| 日韩亚洲综合在线| 91久久久久久久久久久| 欧美电影第一页| 欧美另类极品videosbest最新版本| 久久中文精品视频| 国产欧美日韩亚洲精品| 欧美美女18p| 视频在线观看一区二区| 亚洲xxxx视频| 久久影院中文字幕| www.国产一区| 国产日韩欧美在线视频观看| 国产精品永久免费| 日韩精品欧美国产精品忘忧草| 日韩在线观看成人| 欧美激情一级精品国产| 成人免费福利视频| 少妇激情综合网| 亚洲人永久免费| 国产欧美日韩中文字幕在线| 91免费看片在线| 中文字幕成人在线| 日韩在线观看免费全集电视剧网站| 国产亚洲在线播放| 久久精品视频99| 深夜福利日韩在线看| 国产精品久久久久久亚洲调教| 国内精品久久久久久中文字幕| 国产suv精品一区二区| 日韩网站免费观看| 操91在线视频| 欧美日本中文字幕| 日韩久久精品成人| 欧美在线视频网站| 久久久91精品国产| 日本不卡高字幕在线2019| 国产一区二区欧美日韩| 国产日韩精品在线| 91久久国产综合久久91精品网站| 欧美国产日韩xxxxx| 欧美一区二区影院| 亚洲激情视频网站| 欧美精品激情在线观看| 国产欧美一区二区| 国产精品美女午夜av| 国产精品中文字幕在线观看| 久久伊人免费视频| **欧美日韩vr在线| 欧美xxxx综合视频| 久久久久久久久久久成人| 久久久精品电影| 韩国美女主播一区| 亚洲精品美女网站| 成人福利在线观看| 中文字幕欧美日韩va免费视频| 国产日韩欧美在线视频观看| 欧美老少做受xxxx高潮| 成人午夜在线影院| 国产精品久久久久久久久影视| 精品一区二区电影| 国产精品91在线观看| 国产成人精品网站| 亚洲一级黄色片| 91精品国产自产在线老师啪| 久久影院在线观看| 亚洲国产精品va在线观看黑人| 精品夜色国产国偷在线| 欧洲成人在线观看| 中文字幕在线视频日韩| 亚洲精品久久久久中文字幕二区| 欧美肥老妇视频| 欧美精品久久久久久久久久| 77777亚洲午夜久久多人| 欧美精品生活片| 亚洲欧美精品在线| 日韩高清中文字幕| 国产精品www网站| 日韩在线视频网站| 欧美多人爱爱视频网站| 亚洲一品av免费观看| 成人在线视频福利| 国产精品精品久久久| 在线观看视频99| 7777kkkk成人观看| 久久艳片www.17c.com| 国产日本欧美视频| 日韩亚洲第一页| 国产日韩精品视频| 国产69精品99久久久久久宅男| 91久久综合亚洲鲁鲁五月天| 亚洲国产精品成人va在线观看| 欧美综合激情网| 欧美日韩第一视频| 欧美亚洲成人网| 国产精品第二页| 久久久国产91| 欧美黑人巨大精品一区二区| 久久久久久久亚洲精品| 国产免费亚洲高清| 日韩欧美国产免费播放| 欧美日韩国产91| 日韩久久精品电影| 亚洲www永久成人夜色| 国产精品日韩在线一区| 17婷婷久久www| 亚洲人成电影网站|