- 首先声明一个委托
- 在Button类里声明一个事件及调用该事件的方法
- 在Form类中定义Button对象,以及不同的事件处理函数,再定义函数注册该事件的三种不同处理方法并触发该事件
- 在主函数创建Form类对象调用执行触发该事件的函数就可以看到结果
copyright vivi_and_qiao liwei
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
public delegate void MyDelegate(object o);
class Form
{
Button bu = new Button();
public void click1(object o)
{
Console.ReadKey();
Console.WriteLine("已点击Button");
}
public void click2(object o)
{
Console.ReadKey();
Console.WriteLine("已双击Button");
}
public void click3(object o)
{
Console.ReadKey();
Console.WriteLine("已三击Button");
}
public void chufa()
{
bu.MyEvent+=new MyDelegate(click1);
bu.MyEvent += new MyDelegate(click2);
bu.MyEvent+=new MyDelegate(click3);
bu.Fireway(bu);
bu.MyEvent -= new MyDelegate(click2);
Console.WriteLine("删除第二个事件之后");
bu.Fireway(bu);
}
}
class Button
{
public event MyDelegate MyEvent;
public void Fireway(object o)
{
if (MyEvent != null)
MyEvent(o);
}
}
class Program
{
static void Main(string[] args)
{
new Form().chufa();
Console.ReadKey();
}
}
}
copyright vivi_and_qiao liwei
- 从程序源码以及运行结果图可以知道:这三个事件处理程序的触发时机是在调用事件的方法再被调用的时候,运行顺序是跟事件注册的顺序相同
- 删除第二个事件处理程序,调用事件的方法被调用时,第二个事件的处理程序将不会被执行,其他已经注册的事件将依然按照当初被注册的顺序执行其相应的事件处理程序