C#事件-事件本身就是一种多播委托

C#中的事件就是委托的一个变量。它和属性、方法一样,都是类的成员。只不过事件是指向一个方法,当事件被触发时,就会执行对象的相关方法。

事件的这种对方法的引用并不是写死在代码里面的,而是可以进行更改的。辟如:我们在DotNet中按钮的OnClick事件,它可以指向符合OnClick事件签名的任何一个方法。

1.事件的定义使用event关键字:

public event CryHandler DuckCryEvent;

其中的CryHandler是一个delegate。从上面的代码我们可以看出来:事件就是一个委托类型的变量。

private delegate void CryHandler();

2.指定事件处理程序:

指定事件处理程序就是为事件挂接方法的过程。

DuckCryEvent +=new CryHandler(Cry);

public void Cry()

{

Console.WriteLine("我是一只小鸭,呀依呀依呀....");

}

3.执行事件

执行事件就是调用事件所指向方法的过程。一般对事的执行代码写在相应的方法或属性中,如果方法或属性被调用时就触发事件。

public void BeShaked()

{

DuckCryEvent();

}

4.完整的例子:

using System;

public delegate void CryHandler();

//玩具小鸭的类

class Duck

{

//定义小鸭的唱歌事件

public event CryHandler DuckCryEvent;

public Duck()

{

//把小鸭唱歌的事件挂接到Cry方法上

DuckCryEvent += new CryHandler(Cry);

}

//小鸭唱歌事件对应的处理方法

public void Cry()

{

Console.WriteLine("我是一只小鸭,呀呀呀....");

}

//小鸭被摇动

public void BeShaked()

{

//执行事件

DuckCryEvent();

}

}

class Class2

{

public static void Main(string[]args)

{

//买一只小鸭

Duck d = new Duck();

//摇一摇小鸭,它就会调触发小鸭的Cry事件,小鸭就会唱歌

d.BeShaked();

}

}