一、委托
1、定义一个委托, 相当于public string ss;
public delegate void MyDelegate(string name );
2、定义委托具体执行的事件,必须和上面的委托的参数和返回类型都一样,也就是与void MyDelegate(string name )的形式相同。
public static void MyDelegateFunc( string name )
{
Console.WriteLine("Hello,{0}", name);
}
3、具体调用事件
MyDelegate md = new MyDelegate ( MyDelegateFunc); //类似于String ss = new String("ee");只不过,这边是用函数的名称而已
md("sss");//具体调用方法,相当于调用MyDelegateFunc("sss");现在MyDelegateFunc和md就是相同的了。
二、事件
1、定义一个委托,和上面的委托类似,但是必须是void MyEventHandle(object sender , System.EventArgs e ); 类似这种形式的。
public delegate void MyEventHandle(object sender , System.EventArgs e );
public delegate void MyEventHandle(object sender , MyEventArgs e );// MyEventArgs 是 System.EventArgs的子类
2、定义一个事件变量
public event myEventHanler myevent; //比MyDelegate md多了一个event关键字,表示这是一个事件变量
3、定义事件参数,以第一种为例。
public void MyEventFunc(object sender , System.EventArgs e)
{
Console.WriteLine("My event is OK!");
}
4、用+=注册事件到事件队列中,相当于MyDelegate md = new MyDelegate ( MyDelegateFunc); 用+=替代=
this.myevent += new myEventHanler(MyEventFunc);
5、调用,相当于md("sss");
if ( mevent != null )
{
myevent( this , EventArgs.Empty);//EventArgs.Empty是表示不用e
}
三、传具体参数的事件
1、定义一个委托,和上面的委托类似。
public delegate void MyEventHandle(object sender , MyEventArgs e );// MyEventArgs 是具体的参数
2、定义一个事件
public event myEventHanler myevent;
3、定义具体的事件变量
public void MyEventFunc(object sender , MyEventArgs e)
{
Console.WriteLine("My event is {0}",e.Name);
}
4、注册,同上
this.myevent += new myEventHanler(MyEventFunc);
5、定义MyEventArgs
public class MyEventArgs : System.EventArgs
{
private string _name;
public string Name
{
get
{
return _name;
}
}
public MyEventArgs(string name)
{
_name = name;
}
}
6、调用
if ( mevent != null )
{
myevent( this , new MyEventArgs("dsfs") );
}