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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

转:终于会用c#中的delegate(委托)和event(事件)了

發(fā)布時間:2025/3/15 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:终于会用c#中的delegate(委托)和event(事件)了 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

第一個例子:

public class DelegateTest {// 聲明delegate對象 public delegate void CompareDelegate(int a,int b);// 欲傳遞的方法,它與CompareDelegate具有相同的參數(shù)和返回值類型 public static void Compare(int a,int b){Console.WriteLine((a>b).ToString());}public static void Main(){// 創(chuàng)建delegate對象 CompareDelegate cd = new CompareDelegate(DelegateTest.Compare);// 調(diào)用delegate cd(1,2);} }

再來一個例子:

public delegate void MyTestDelegate(int i); public class Program {public static void Main(){//創(chuàng)建delegateReceiveDelegateArgsFunc(new MyTestDelegate(DelegateFunction));}//這個方法接收一個delegate類型的參數(shù),也就是接收一個函數(shù)作為參數(shù)public static void ReceiveDelegateArgsFunc(MyTestDelegate func){func(21);}//欲傳遞的方法public static void DelegateFunction(int i){System.Console.WriteLine("傳過來的參數(shù)為: {0}.", i);} }

?

?

三、事件,讓你明白傻瓜式的OnClick是怎么來的

?

C#中的事件處理實際上是一種具有特殊簽名的delegate,象下面這個樣子:

public delegate void MyEventHandler(object sender, MyEventArgs e);

?

其中的兩個參數(shù),sender代表事件發(fā)送者,e是事件參數(shù)類。MyEventArgs類用來包含與事件相關(guān)的數(shù)據(jù),所有的事件參數(shù)類都必須從 System.EventArgs類派生。當(dāng)然,如果你的事件不含參數(shù),那么可以直接用System.EventArgs類作為參數(shù)。

好了,咱們就以O(shè)nClick為例說說事件的實現(xiàn)吧。

?

//這里自定義一個EventArgs,因為我想知道Clicker public class ButtonClickArgs : EventArgs {public string Clicker; }public class MyButton {//定義一個delegate委托public delegate void ClickHandler(object sender, ButtonClickArgs e);//定義事件,類型為上面定義的ClickHandler委托public event ClickHandler OnClick;public void Click(){//...觸發(fā)之前可能做了n多操作//.....//這時觸發(fā)Click事件,并傳入?yún)?shù)Clicker為本博主ivyOnClick(this, new ButtonClickArgs() { Clicker = "ivy" });} }public class Program {public static void Main(){MyButton btn = new MyButton();//注冊事件,把btn_OnClick方法壓入事件隊列,//可以+=多個,這里簡單點就壓入一個吧。btn.OnClick += new MyButton.ClickHandler(btn_OnClick);}this.button1.Click += new System.EventHandler(this.button1_Click);//原本雙擊的效果是這樣//怎么看到這個函數(shù)很熟悉吧,就是你原來雙擊button自動產(chǎn)生的代碼public static void btn_OnClick(object sender, ButtonClickArgs e){Console.WriteLine("真賤,我居然被ivy點擊了!");} }

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/bantongshui/p/3189711.html

總結(jié)

以上是生活随笔為你收集整理的转:终于会用c#中的delegate(委托)和event(事件)了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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