转:终于会用c#中的delegate(委托)和event(事件)了
生活随笔
收集整理的這篇文章主要介紹了
转:终于会用c#中的delegate(委托)和event(事件)了
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
第一個(gè)例子:
public class DelegateTest {// 聲明delegate對(duì)象 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對(duì)象 CompareDelegate cd = new CompareDelegate(DelegateTest.Compare);// 調(diào)用delegate cd(1,2);} }再來(lái)一個(gè)例子:
public delegate void MyTestDelegate(int i); public class Program {public static void Main(){//創(chuàng)建delegateReceiveDelegateArgsFunc(new MyTestDelegate(DelegateFunction));}//這個(gè)方法接收一個(gè)delegate類型的參數(shù),也就是接收一個(gè)函數(shù)作為參數(shù)public static void ReceiveDelegateArgsFunc(MyTestDelegate func){func(21);}//欲傳遞的方法public static void DelegateFunction(int i){System.Console.WriteLine("傳過(guò)來(lái)的參數(shù)為: {0}.", i);} }?
?
三、事件,讓你明白傻瓜式的OnClick是怎么來(lái)的
?
C#中的事件處理實(shí)際上是一種具有特殊簽名的delegate,象下面這個(gè)樣子:
public delegate void MyEventHandler(object sender, MyEventArgs e);?
其中的兩個(gè)參數(shù),sender代表事件發(fā)送者,e是事件參數(shù)類。MyEventArgs類用來(lái)包含與事件相關(guān)的數(shù)據(jù),所有的事件參數(shù)類都必須從 System.EventArgs類派生。當(dāng)然,如果你的事件不含參數(shù),那么可以直接用System.EventArgs類作為參數(shù)。
好了,咱們就以O(shè)nClick為例說(shuō)說(shuō)事件的實(shí)現(xiàn)吧。
?
//這里自定義一個(gè)EventArgs,因?yàn)槲蚁胫繡licker public class ButtonClickArgs : EventArgs {public string Clicker; }public class MyButton {//定義一個(gè)delegate委托public delegate void ClickHandler(object sender, ButtonClickArgs e);//定義事件,類型為上面定義的ClickHandler委托public event ClickHandler OnClick;public void Click(){//...觸發(fā)之前可能做了n多操作//.....//這時(shí)觸發(fā)Click事件,并傳入?yún)?shù)Clicker為本博主ivyOnClick(this, new ButtonClickArgs() { Clicker = "ivy" });} }public class Program {public static void Main(){MyButton btn = new MyButton();//注冊(cè)事件,把btn_OnClick方法壓入事件隊(duì)列,//可以+=多個(gè),這里簡(jiǎn)單點(diǎn)就壓入一個(gè)吧。btn.OnClick += new MyButton.ClickHandler(btn_OnClick);}this.button1.Click += new System.EventHandler(this.button1_Click);//原本雙擊的效果是這樣//怎么看到這個(gè)函數(shù)很熟悉吧,就是你原來(lái)雙擊button自動(dòng)產(chǎn)生的代碼public static void btn_OnClick(object sender, ButtonClickArgs e){Console.WriteLine("真賤,我居然被ivy點(diǎn)擊了!");} }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/bantongshui/p/3189711.html
總結(jié)
以上是生活随笔為你收集整理的转:终于会用c#中的delegate(委托)和event(事件)了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: groovy 字符串截取最后一个_pyt
- 下一篇: 转:C#判断ContextMenuStr