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

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

delegate vs event

2019-11-11 04:09:42
字體:
來源:轉載
供稿:網友

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亚洲永久免费精品| 久久天天躁夜夜躁狠狠躁2022| 日韩中文视频免费在线观看| 国产精品∨欧美精品v日韩精品| 久久777国产线看观看精品| 久久久久久久久久久免费| 国产欧美日韩中文字幕| 国产精品久久久久9999| 精品久久久久久久久久| 国产一区二区三区在线视频| 91精品在线观看视频| 欧美视频在线观看免费| 国产精品久久99久久| 日韩免费观看高清| 国产精品麻豆va在线播放| 奇米4444一区二区三区| 日韩美女视频免费在线观看| 日韩av网址在线观看| 91在线免费视频| 九九精品视频在线观看| 亚洲黄色av网站| 欧美在线视频一区二区| 欧美黑人性猛交| 高潮白浆女日韩av免费看| 欧美色道久久88综合亚洲精品| 色婷婷久久av| 久久偷看各类女兵18女厕嘘嘘| 国产精品日韩在线一区| 俺去了亚洲欧美日韩| 97久久精品国产| 亚洲视频777| 国产精品国产三级国产专播精品人| 国产成人精品综合久久久| 亚洲第一页自拍| 18一19gay欧美视频网站| 日韩av在线网站| 亚洲精品久久久久久久久久久久| 韩日精品中文字幕| 欧美高清一级大片| 国产一区二区三区日韩欧美| 久久人人97超碰精品888| 欧美日韩一区二区免费视频| 欧美日韩在线免费| 国产91精品黑色丝袜高跟鞋| 国产一区二区三区在线看| 国产一区二区色| 在线视频国产日韩| 色悠久久久久综合先锋影音下载| 中文字幕一区日韩电影| 欧美不卡视频一区发布| 成人网在线观看| 激情久久av一区av二区av三区| 国产精品日日摸夜夜添夜夜av| 欧美精品在线极品| 在线观看91久久久久久| 精品国内产的精品视频在线观看| 国产在线视频一区| 亚洲国产精品va在线看黑人动漫| 日韩精品在线观看一区| 亚洲人成五月天| 97av在线播放| 亚洲欧美在线x视频| 国产精品久久视频| 日韩电影中文字幕在线观看| 欧美乱人伦中文字幕在线| 日韩av在线影视| 日韩免费黄色av| 欧美电影在线观看完整版| 91亚洲精品久久久久久久久久久久| 欧美重口另类videos人妖| 久久久久99精品久久久久| 国模吧一区二区| 91精品综合久久久久久五月天| 欧美激情网站在线观看| 色综合久久久久久中文网| 91精品国产乱码久久久久久久久| 久久国产视频网站| 国产精品久久久久7777婷婷| 国产精品免费视频久久久| 欧美性猛交xxxx富婆弯腰| 4438全国亚洲精品在线观看视频| 久久视频在线视频| 日韩在线播放一区| 亚洲国产婷婷香蕉久久久久久| 国产不卡av在线| 欧美精品18videos性欧| 91精品91久久久久久| 亚洲天堂免费观看| 亚洲女同精品视频| 精品国产视频在线| 久久久噜久噜久久综合| 欧美激情伊人电影| 久久91亚洲人成电影网站| 久久99热这里只有精品国产| 欧美制服第一页| 2019国产精品自在线拍国产不卡| 欧美激情极品视频| 日韩电影大全免费观看2023年上| 欧美日韩成人黄色| 成人信息集中地欧美| 黑人与娇小精品av专区| 亚洲国产欧美日韩精品| www欧美日韩| 国产成人综合精品在线| 国产精品成人av在线| 国产97在线亚洲| 91久久综合亚洲鲁鲁五月天| 国产一区二区三区18| 国产91在线播放九色快色| 92看片淫黄大片欧美看国产片| 成人精品aaaa网站| 久久91精品国产| 欧美一级淫片videoshd| 精品久久久在线观看| 欧美日韩在线观看视频| 在线日韩中文字幕| 中文字幕一区电影| 久久久久久久久久av| 国产精品你懂得| 亚洲精品大尺度| 欧美国产中文字幕| 中文字幕av日韩| 最近2019免费中文字幕视频三| 亚洲香蕉伊综合在人在线视看| 国产精品久久久一区| 国产免费一区二区三区香蕉精| 亚洲国产精品久久久久秋霞不卡| 国产日韩综合一区二区性色av| 亚洲第一页在线| 国产精品看片资源| 国产精品自拍网| 亚洲专区中文字幕| 亚洲综合精品一区二区| 亚洲自拍偷拍第一页| 久久久久亚洲精品成人网小说| 九色精品免费永久在线| 亚洲综合中文字幕68页| 欧美在线欧美在线| 91免费看片在线| 视频在线观看一区二区| 国产精品手机播放| 日本免费久久高清视频| 97精品国产97久久久久久| 深夜精品寂寞黄网站在线观看| 日韩欧美aⅴ综合网站发布| 国产精品一二三在线| 国产91成人在在线播放| 91视频国产精品| 爽爽爽爽爽爽爽成人免费观看| 成人午夜激情网| 91精品久久久久久久久久入口| 亚洲国产精品一区二区三区| 亚洲女人被黑人巨大进入al| 国产激情久久久久| 日韩精品黄色网| 日韩在线观看免费| 成人h片在线播放免费网站| 国产精品久久av| 久久999免费视频| 欧美日韩在线一区| 96精品视频在线| 日韩在线播放视频| 成人伊人精品色xxxx视频| 精品免费在线视频|