日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面向对象基础-委托与事件

發(fā)布時(shí)間:2023/12/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象基础-委托与事件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先舉一個(gè)實(shí)例:
創(chuàng)建一個(gè)控制臺(tái)程序,需求是:有一只貓Tom,有兩只老鼠Jerry和Jack,Tom只叫一聲“喵,我是Tom”,兩只老鼠就說(shuō)“老貓來(lái)了,快跑”,我們來(lái)分析一下:
我們需要Cat和Mouse類兩個(gè)類,當(dāng)Cat的Shout方法觸發(fā)的時(shí)候,Mouse就執(zhí)行Run方法,不過(guò)這里如何讓Shout觸發(fā)式,通知兩只老鼠呢?顯然老貓不會(huì)通知老鼠“我來(lái)了,你們快跑”。
所以,我們?cè)贑at類中,不應(yīng)該關(guān)聯(lián)Mouse類的。這個(gè)時(shí)候,委托事件就是最好的處理方法了。
委托是對(duì)函數(shù)的封裝,可以當(dāng)作方法的特征指定一個(gè)名稱。而事件則是委托的一種特殊形式,當(dāng)發(fā)生有意義的事件時(shí),時(shí)間對(duì)象處理通知過(guò)程。
委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有完全相同的行為,委托用關(guān)鍵字delegate來(lái)聲明,而事件就是說(shuō)在發(fā)生其他類或者對(duì)象關(guān)注事件時(shí),類或?qū)ο罂赏ㄟ^(guò)事件通知他們,事件的關(guān)鍵字 用event聲明。

1: class Cat2 2: { 3: private string name; 4: public Cat2(string name) 5: { 6: this.name = name; 7: } 8: public delegate void CatShoutEventHandler(); 9: public event CatShoutEventHandler CatShout; 10: public void Shout() 11: { 12: Console.Write("喵,我是{0}.", name); 13: if (CatShout != null) 14: CatShout(); 15: } 16: } 17: ? 18: class Mouse 19: { 20: private string name; 21: public Mouse(string name) 22: { 23: this.name = name; 24: } 25: public void Run() 26: { 27: Console.WriteLine("老貓來(lái)了,{0}快跑!", name); 28: } 29: } 30: ? 31: static void Main(string[] args) 32: { 33: Cat2 cat = new Cat2("Tom"); 34: Mouse mouse1 = new Mouse("Jerry"); 35: Mouse mouse2 = new Mouse("Jace"); 36: cat.CatShout += new Cat2.CatShoutEventHandler(mouse1.Run); 37: cat.CatShout += new Cat2.CatShoutEventHandler(mouse2.Run); 38: cat.Shout(); 39: Console.Read(); 40: }

?

new Cat2.CatShoutEventHandler(mouse1.Run)的含義是實(shí)例化一個(gè)委托,而委托的實(shí)例其實(shí)就是Mouse的Run方法。而“cat.CahShout += ”表示

cat.add_CatShout(new Cat2.CatShoutEventHandler(mouse1.Run))的意思。運(yùn)行的結(jié)果:

我們平時(shí)在點(diǎn)擊一個(gè)按鈕的時(shí)候,通常看到這樣子的東西:

private void button5_Click(object sender, EventArgs e)

這里的sender和e有什么用呢?
我們首先修改一下上面的例子

1: class Cat2 2: { 3: private string name; 4: public Cat2(string name) 5: { 6: this.name = name; 7: } 8: public delegate void CatShoutEventhandler(object sender, CatShoutEventArgs args); 9: public event CatShoutEventhandler CatShout; 10: public void Shout() 11: { 12: Console.Write("喵,我是{0}.", name); 13: if (CatShout != null) 14: { 15: CatShoutEventArgs e = new CatShoutEventArgs(); 16: e.Name = this.name; 17: CatShout(this, e); 18: } 19: } 20: } 21: ? 22: class Mouse 23: { 24: private string name; 25: public Mouse(string name) 26: { 27: this.name = name; 28: } 29: public void Run(object sender, CatShoutEventArgs args) 30: { 31: Console.WriteLine("老貓{0}來(lái)了,{1}快跑!", args.Name, name); 32: } 33: }

?

Main函數(shù)不變。這個(gè)時(shí)候的結(jié)果是:

轉(zhuǎn)載于:https://www.cnblogs.com/chenamo5776/archive/2011/11/13/2247177.html

總結(jié)

以上是生活随笔為你收集整理的面向对象基础-委托与事件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。