using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
MyClass mc = new MyClass();
myButton godBtn = new myButton();
godBtn.myClick += new EventHandler(mc.godBtnClick);
godBtn.OnmyClick();
Console.ReadLine();
}
public void godBtnClick(object sender,EventArgs e)
{
Console.WriteLine("on my godbutton");
}
}
public class myButton
{
public event EventHandler myClick; //一个委托事件 myClick
protected void OnmyClick() //注意,最好使用protected修饰符,以便只给继承它的类使用
{
if(myClick != null)
{
myClick(this,new EventArgs());
}
}
}
定义实现一个事件的流程
1、引发事件的对象称事件源;
2、事件总是委托类型的,这个委托类型的签名定义了处理该事件的方法的签名;(如myClick)
3、定义事件处理程序方法的对象称事件接收方(就是主程序此例为MyClass);
4、事件接收方提供的事件处理方法必须与该事件预订的方法签名一致. (如godBtnClick)
5、在事件的通信中,事件发送者不知道哪个对象或方法将要去接收/发送事件,因而在事件源和事件接收者之间就需要一个中间人-委托;
6、当指派多个处理程序给一个事件的时候,处理程序的调用次序是没有保证的.(多播委托)
7、EventHandler 是一个用于事件的委托,它有两个参数object和EventArg,object代表了事件的发送者,EventArg对象代表了事件包含的数据;
8、所以有事件处理方法都可以使用EventHandler,但你也可以使用 EventHandler的子类.(如public event PaintEventHandler Paint; 其实PaintEventHandler 是EventHandler的子类)
1)定义事件(变量) public event EventHandler myClick;
2)定义事件方法 public static void godBtnClick(object sender, EventArgs e);
3)将事件与事件方法相关联 mc.myClick+= new EventHandler(godBtnClick); //EventHandler是一个委托,委托通常把方法当参数传递,btnGetClick是一个方法
4)定义响应函数 publicvoid OnmyClick()
5)调用响应函数,响应函数调用触发函数,事件被触发了 mc.OnmyClick();
注:在系统定义的响应事件中,第4) 5)步是不可见的.