{
string strDelegate = callback("The number is: " + (param1 + param2).ToString());
}
输出结果:DelegateMethod Return : The number is: 3
// 在包或类里声明委托
public delegate void TestDelegate(Object sender, TestEventArgs e);
/*
* 事件发送者(EventSender):定义委托实例(TestEvent)与委托的调用函数(SendEvent)
* 委托的调用函数就是发送委托
*
* 事件的订阅者(EventOrder):在事件发送者实例中注册(注册还是监听不确定),接收事件发送者发出的委托,并实例化这个委托
*
* 触发事件:调用事件发送者的发送函数
*
* this.Button1.Click += new System.EventHandler(this.Button1_Click);
*
* private void Button1_Click(object sender, System.EventArgs e)
* {
* // do smoething
* }
*
* 声明委托对象并通过event关键字来引用该委托对象
* System.EventHandler相当于事件发送者,EventSender,Button1_Click相当于DelegateWorkFun。
*
*/
/// <summary>
/// 事件的发送者
/// </summary>
public class EventSender
{
// 通过委托定义事件(委托实例)
public event TestDelegate TestEvent;
// 发送事件(发送了一个委托实例)
public void SendEvent(TestEventArgs e)
{
if (TestEvent != null)
{
TestEvent(this, e);
}
}
}
/// <summary>
/// 事件的订阅者
/// </summary>
public class EventOrder
{
public EventOrder(EventSender eventSender)
{
// 关联事件的处理函数(实例化委托即关联委托实例与委托函数)
eventSender.TestEvent += new TestDelegate(DelegateWorkFun);
}
// 事件的处理函数(委托实例关联的函数)
public void DelegateWorkFun(Object sender, TestEventArgs e)
{
Console.WriteLine("room {0},ferocity {1}", e.room, e.ferocity);
}
}
/// <summary>
/// 事件参数
/// </summary>
public class TestEventArgs : EventArgs
{
public TestEventArgs(string room, int ferocity)
{
this.room = room;
this.ferocity = ferocity;
}
public string room;
public int ferocity;
}