C#中的delegate(委託)和event(事件)
剛才發現一篇好文章,趕緊備份下來,歡迎有需要的同好一起來C/P一下。
資料來源:http://www.itivy.com/ivy/archive/2011/8/5/csharp-delegate-and-event.html
public class DelegateTest { // 聲明delegate對象 public delegate void CompareDelegate(int a,int b); // 欲傳遞的方法,它與CompareDelegate具有相同的參數和返回值類型 public static void Compare(int a,int b) { Console.WriteLine((a>b).ToString()); } public static void Main() { // 創建delegate對象 CompareDelegate cd = new CompareDelegate(DelegateTest.Compare); // 調用delegate cd(1,2); } }
|
public delegate void MyTestDelegate(int i); public class Program { public static void Main() { //創建delegate ReceiveDelegateArgsFunc(new MyTestDelegate(DelegateFunction)); } //這個方法接收一個delegate類型的參數,也就��接收一個函數作為參數 public static void ReceiveDelegateArgsFunc(MyTestDelegate func) { func(21); } //欲傳遞的方法 public static void DelegateFunction(int i) { System.Console.WriteLine("傳過來的參數為: {0}.", i); } }
|
//這裏自定義一個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() { //...觸發之前可能做了n多操作 //..... //這時觸發Click事件,並傳入參數Clicker為本博主ivy OnClick(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); } //怎麼看到這個函數很熟悉吧,就��你原來雙擊button自動產生的代碼 public static void btn_OnClick(object sender, ButtonClickArgs e) { Console.WriteLine("真賤,我居然被ivy點擊了!"); } }
|
沒有留言:
張貼留言