Delegate EventHandler 用法
參考這篇
事件的深入分析(function pointer, delegate, event, EventHandler)
http://johnniebooks.blogspot.tw/2011/02/function-pointer-delegate-event.html
透過Delegate指派給物件的事件
達到在主程式時動態新增函式的目的
其中函式可為具名或匿名的
方法:
在物件內宣告 public delegate void [EventHandlerName] (object sender,EventArgs e);
參數是固定的,事件名字可以自己取
宣告 public event [EventHandlerName] [EventObject];
讓該物件可以使用該事件
在主程式裡撰寫匿名或具名函式
透過 += -= 來新增或刪除該事件下的函式
程式會依據註冊順序執行該物件的事件
程式碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateTest
{
class Program
{
static void Main(string[] args)
{
Agent agent1=new Agent();
agent1.EndEvent += OtherMedthod;
//匿名委派
agent1.EndEvent+= delegate (object sender,EventArgs e)
{
string name= sender as string;
Console.WriteLine("---"+name+"---END---");
};
Console.WriteLine("MainStart");
agent1.Send("Tony");
Console.WriteLine("MainEnd");
}
//具名委派
static void OtherMedthod(object sender, EventArgs e)
{
string name = sender as string;
Console.WriteLine("---" + name + "---PLAY---");
}
}
class Agent
{
//宣告一個EventHandler,名稱自取,參數固定
public delegate void EndEventHandler (object sender,EventArgs e);
//宣告一個EndEventHandler,方便後續程式使用
public event EndEventHandler EndEvent;
public Agent()
{
}
public void Send(string content)
{
Console.WriteLine("Send Message.");
//確認EventHandler有被委派
if(EndEvent!=null)
EndEvent.Invoke(content,null);
}
}
}
程式碼結果
