[C#.NET] 如何 使用 委派 Delegate / 事件 event
利用委派進階叫用函式。
1. 委派可以將方法當成參數來進行傳遞
委派宣告:
[public|private|protected] Delegate [void | 回傳資料型態] 委派名稱 ([參數群一]);
2. 委派是事件的基礎(event),可以利用委派來呼叫不同的事件,以便觸發其他控制項事件來完成互動性強大的應用程式。
事件宣告:
public event ClickEventHandler ClickEvent;
[存取修飾詞] event 委派方法 事件名稱 ;
3. Delegate方法,可用於向某個Class傳遞註冊過的方法(註冊的Method的參數必須和Delegate方法完全一致)
4. VB已有WithEvents不使用委派也能達到觸發事件的功能,但在C#必須自己宣告委派才能使用事件,C#在使用事件還真麻煩呢。
如何使用委派傳遞方法
1.建立方法;一個有回傳值,一個沒有。
public int InstanceMethod(int a, int b)
{
Console.WriteLine("Call InstanceMethod ");
Console.WriteLine("First parametre is {0},second parametre is {1}", a, b);
return 0;
}
static public void StaticMethod()
{
Console.WriteLine("Call Static Method");
}
2.宣告委派;委派參數,需要與被呼叫的方法一樣,包含回傳型別。
private delegate void MyDelegate();
private delegate int MeDelegatePara(int a, int b);
3.引用委派(實體化),後指定方法
MyDelegate D = new MyDelegate(MyClass.StaticMethod);
4.呼叫函數
D.Invoke();
可省略成
D();
如何使用事件傳遞方法
1.建立事件函數
修飾詞最好使用protected virtual這樣子類別就可以直接覆寫事件觸發的定義
private void MyButton_Click(object sender, EventArgs e)
{
Console.WriteLine("事件發生了喔");
}
2.委派宣告
public delegate void ClickEventHandler(object sender, EventArgs e);
3.創建MyBottom類別
4.宣告MyBottom的事件
5.建立MyButton成員方法
6.拋出事件,給所有相應者
//3.創建MyBottom類別
public class MyButton
{
//4.宣告MyBottom的事件
public event ClickEventHandler ClickEvent;
//5.建立MyButton成員方法
public void Click()
{
if (ClickEvent != null)
{
Console.WriteLine("事件開始");
//6.拋出事件,給所有相應者
ClickEvent(this, null);
}
}
}
7.引用類別實體化
public MyButton myButton = new MyButton();
8.事件實體化,註冊事件
myButton.ClickEvent += new ClickEventHandler(MyButton_Click);
9.使用方式
private void Form1_Load(object sender, EventArgs e)
{
//引用
Form1 form = new Form1();
form.myButton.Click();
}
範例下載:C#.NET 委派事件用法.rar
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET