2013年12月21日 星期六

C#中的delegate(委託)和event(事件)

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點擊了!");
}
}


 


沒有留言:

張貼留言