using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DelegateDemo
{
/// <summary>
/// 委托和事件的例子
/// </summary>
public class Program
{
public delegate void CompareDelegate(int a, int b);
public static void CompareValue(int a, int b)
{
Console.Write((a > b).ToString() + "委托例子结束\r\n");
}
public static void Main(string[] args)
{
//委托
CompareDelegate cd = new CompareDelegate(Program.CompareValue);
cd(6, 3);
//事件
MyButton btn = new MyButton();
btn.MyOnClick +=new ClickHandler(btn_OnClick);
btn.Click("系统本人");
}
public static void btn_OnClick(object sender, ButtonClickArgs e)
{
Console.WriteLine(e._clicker + "触发了事件");
Console.Read();
}
}
/*事件部分*/
//定义一个delegate委托事件
public delegate void ClickHandler(object sender, ButtonClickArgs e);
public class MyButton
{
//定义事件,类型为上面定义的ClickHandler委托
public event ClickHandler MyOnClick;
public void Click(string clicker)
{
//...触发之前可能做了n多操作
//.....
ButtonClickArgs e = new ButtonClickArgs(clicker);
//这时触发Click事件,并传入参数Clicker为本博主ivy
OnClick(e);
}
//这里使用保护类型的虚方法主要有以下好处:
//可供继承类重写方法,可以在子类中不实现事件触发操作
protected virtual void OnClick(ButtonClickArgs e)
{
if (MyOnClick != null)
{
MyOnClick(this, e);
}
}
}
//自定义事件参数
public class ButtonClickArgs : EventArgs
{
public string _clicker;
public ButtonClickArgs() { }
public ButtonClickArgs(string sclicker)
{
_clicker = sclicker;
}
public string Clicker
{
get { return _clicker; }
}
}
}