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

首頁 > 編程 > C# > 正文

C#中委托和事件的區別實例解析

2020-01-24 02:25:39
字體:
來源:轉載
供稿:網友

本文實例分析了C#中委托和事件的區別,分享給大家供大家參考之用。具體如下:

大致來說,委托是一個類,該類內部維護著一個字段,指向一個方法。事件可以被看作一個委托類型的變量,通過事件注冊、取消多個委托或方法。本篇分別通過委托和事件執行多個方法,從中體會兩者的區別。

一、通過委托執行方法

class Program{    static void Main(string[] args)    {      Example example = new Example();      example.Go();      Console.ReadKey();    }}public class Example{    public delegate void DoSth(string str);    internal void Go()    {      //聲明一個委托變量,并把已知方法作為其構造函數的參數      DoSth d = new DoSth(Print);      string str = "Hello,World";      //通過委托的靜態方法Invoke觸發委托      d.Invoke(str);    }    void Print(string str)    {      Console.WriteLine(str);    }}

上述代碼實現:

① 在CLR運行時,委托DoSth實際上就一個類,該類有一個參數類型為方法的構造函數,并且提供了一個Invoke實例方法,用來觸發委托的執行。
② 委托DoSth定義了方法的參數和返回類型
③ 通過委托DoSth的構造函數,可以把符合定義的方法賦值給委托
④ 調用委托的實例方法Invoke執行了方法

但實際上讓委托執行方法還有另外一種方式,那就是:委托變量(參數列表)

public class Example{    public delegate void DoSth(object sender, EventArgs e);    internal void Go()    {      //聲明一個委托變量,并把已知方法作為其構造函數的參數      DoSth d = new DoSth(Print);      object sender = 10;      EventArgs e = new EventArgs();      d(sender, e);    }    void Print(object sender, EventArgs e)    {      Console.WriteLine(sender);    }}

上述代碼實現:

① 委托DoSth的參數列表和方法Print的參數列表還是保持一致
② 委托DoSth中的參數object sender通常用來表示動作的發起者,EventArgs e用來表示動作所帶的參數。

而實際上,委托變量(參數列表),事件就是采用這種形式執行方法的。

二、通過事件執行方法

public class Example{    public delegate void DoSth(object sender, EventArgs e);    public event DoSth myDoSth;    internal void Go()    {      //聲明一個委托變量,并把已知方法作為其構造函數的參數      DoSth d = new DoSth(Print);      object sender = 10;      EventArgs e = new EventArgs();      myDoSth += new DoSth(d);      myDoSth(sender, e);    }    void Print(object sender, EventArgs e)    {      Console.WriteLine(sender);    }}

上述代碼實現:

① 聲明了事件myDoSth,事件的類型是DoSth這個委托
② 通過+=為事件注冊委托
③ 通過DoSth委托的構造函數為事件注冊委托實例
④ 采用委托變量(參數列表)這種形式,讓事件執行方法

而且,通過+=還可以為事件注冊多個委托。

public class Example{    public delegate void DoSth(object sender, EventArgs e);    public event DoSth myDoSth;    internal void Go()    {      //聲明一個委托變量,并把已知方法作為其構造函數的參數      DoSth d = new DoSth(Print);      DoSth d1 = new DoSth(Say);      object sender = 10;      EventArgs e = new EventArgs();      //為事件注冊多個委托      myDoSth += new DoSth(d);      myDoSth += new DoSth(d1);      myDoSth(sender, e);    }    void Print(object sender, EventArgs e)    {      Console.WriteLine(sender);    }    void Say(object sender, EventArgs e)    {      Console.WriteLine(sender);    }}

以上,通過+=為事件注冊1個或多個委托實例,實際上,還可以為事件直接注冊方法。

public class Example{    public delegate void DoSth(object sender, EventArgs e);    public event DoSth myDoSth;    internal void Go()    {      object sender = 10;      EventArgs e = new EventArgs();      //為事件注冊多個委托      myDoSth += Print;      myDoSth += Say;      myDoSth(sender, e);    }    void Print(object sender, EventArgs e)    {      Console.WriteLine(sender);    }    void Say(object sender, EventArgs e)    {      Console.WriteLine(sender);    }}   

三、通過EventHandler執行方法

先來看EventHandler的源代碼。

public delegate void EventHandler(object sender, System.EventArgs e);

可見,EventHandler就是委托?,F在就使用EventHandler來執行多個方法。

public class Example{    public event EventHandler myEvent;    internal void Go()    {      object sender = 10;      EventArgs e = new EventArgs();      //為事件注冊多個委托      myEvent += Print;      myEvent += Say;      myEvent(sender, e);    }    void Print(object sender, EventArgs e)    {      Console.WriteLine(sender);    }    void Say(object sender, EventArgs e)    {      Console.WriteLine(sender);    }}

總結:

① 委托就是一個類,也可以實例化,通過委托的構造函數來把方法賦值給委托實例
② 觸發委托有2種方式: 委托實例.Invoke(參數列表),委托實例(參數列表)
③ 事件可以看作是一個委托類型的變量
④ 通過+=為事件注冊多個委托實例或多個方法
⑤ 通過-=為事件注銷多個委托實例或多個方法
⑥ EventHandler就是一個委托

相信本文所述對大家C#程序設計的學習有一定的借鑒價值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美视频二区36p| 亚洲美女福利视频网站| 国产精品欧美一区二区三区奶水| 久久久久久久久久久91| 成人有码在线播放| 日韩精品在线观看视频| 777国产偷窥盗摄精品视频| 92版电视剧仙鹤神针在线观看| 亚洲人成电影网站色www| 日韩av在线看| 国产精品日韩欧美大师| 国产精品久久久精品| 国产97在线|日韩| 国产日产久久高清欧美一区| 久久av在线播放| 91人成网站www| 精品久久久久久久久久久| 一区二区三区亚洲| 欧美亚洲午夜视频在线观看| 国产欧美在线播放| 亚洲午夜女主播在线直播| 亚洲精品一区二区在线| 国产精品一久久香蕉国产线看观看| 欧美中文字幕在线观看| 国产欧美一区二区三区在线| 欧美电影在线播放| 亚洲午夜激情免费视频| 国产欧美va欧美va香蕉在线| 黄色91在线观看| 亚洲电影天堂av| 亚洲欧美日韩视频一区| 国外视频精品毛片| 久久久久久中文字幕| 国产精品久久久久久五月尺| 国产精品午夜视频| 国产亚洲人成a一在线v站| 一区二区三区视频免费| 欧美野外猛男的大粗鳮| 国产婷婷97碰碰久久人人蜜臀| 国产亚洲精品高潮| 欧美激情一区二区三区在线视频观看| 日韩中文字幕在线精品| 日韩精品中文字幕视频在线| 亚洲精品www| www.欧美三级电影.com| 久久精品成人动漫| 日韩成人免费视频| 91成人福利在线| 不卡伊人av在线播放| 成人欧美在线观看| 欧美日韩精品在线观看| 亚洲aⅴ男人的天堂在线观看| 精品亚洲国产成av人片传媒| 国产精品毛片a∨一区二区三区|国| 亚洲女在线观看| 色偷偷偷综合中文字幕;dd| 中文字幕在线观看亚洲| 欧美午夜影院在线视频| 综合国产在线视频| 久久久www成人免费精品| 欧美噜噜久久久xxx| 国产97色在线| 久久高清视频免费| 在线成人激情视频| 精品视频偷偷看在线观看| 欧美www视频在线观看| 国产在线视频欧美| 亚洲国产精品字幕| 亚洲美女中文字幕| 色无极亚洲影院| 国产999精品| 亚洲午夜未删减在线观看| 亚洲视频999| 欧美日韩免费网站| 精品久久久视频| 亚洲欧美激情四射在线日| 日韩精品福利在线| 粉嫩老牛aⅴ一区二区三区| 亚洲永久在线观看| 色综合久久中文字幕综合网小说| 中文字幕日韩在线视频| 成人在线一区二区| 久久久久久国产精品美女| 国产精品久久一区| 欧美日韩中文在线| 中文在线资源观看视频网站免费不卡| 精品国产1区2区| 欧美丝袜美女中出在线| 97国产精品人人爽人人做| 亚洲毛片一区二区| 欧美中文字幕视频| 91亚洲精华国产精华| 日韩av网址在线观看| 国产69久久精品成人看| 国产精品爱久久久久久久| 久久深夜福利免费观看| 91精品国产综合久久香蕉最新版| 性色av一区二区三区在线观看| 日本欧美中文字幕| 欧美午夜丰满在线18影院| 欧美亚洲在线观看| 国产脚交av在线一区二区| 日韩精品中文字幕视频在线| 亚洲偷熟乱区亚洲香蕉av| 色综合亚洲精品激情狠狠| 久久久久亚洲精品成人网小说| 久久福利视频导航| 亚洲乱码国产乱码精品精天堂| 色777狠狠综合秋免鲁丝| 国产日韩精品综合网站| 久久精品最新地址| 久久久亚洲影院你懂的| 亚洲成人黄色在线| 欧美精品日韩www.p站| 国产亚洲一区精品| 成人免费大片黄在线播放| 国产69久久精品成人看| 亚洲天堂av女优| 亚洲电影免费观看高清完整版在线观看| 欧美电影在线免费观看网站| 久久综合国产精品台湾中文娱乐网| 亚洲高清免费观看高清完整版| 国产这里只有精品| 亚洲视频专区在线| 亚洲综合小说区| 亚洲精选中文字幕| 欧美激情三级免费| 日韩精品在线观| 精品福利在线看| 麻豆国产va免费精品高清在线| 高清欧美电影在线| 国产精品中文字幕久久久| 91久久精品国产91性色| 欧美日韩国产中文字幕| 欧美另类第一页| 国产美女搞久久| 高清一区二区三区四区五区| 亚洲a一级视频| 国产精品电影久久久久电影网| 成人国产精品久久久久久亚洲| 国产精品偷伦一区二区| 日本中文字幕成人| 亚洲色图校园春色| 久久中文字幕在线| 97av在线视频免费播放| 国产日韩av在线播放| 欧美在线观看网址综合| 精品国模在线视频| 欧美激情国产精品| 国产欧美一区二区三区四区| 日本久久精品视频| 亚洲男女性事视频| 欧美大荫蒂xxx| 国产在线视频不卡| 91精品在线国产| 丝袜美腿精品国产二区| 欧美在线视频网| 中文字幕av一区二区| 国产欧美一区二区三区在线看| 韩国三级电影久久久久久| 亚洲福利在线视频| 亚洲最大的网站| 日韩女优在线播放| 亚洲第一在线视频|