C#知识(5)
1.事件
上一篇讲了委托,这篇讲事件,事件这玩意我自己又没怎么用过,不过没关系,因为这玩意能干的事委托都能干,事实上他其实就是在委托上面加了一些限制来确保委托不会被滥用,至于它的相关知识,了解用法即可,因为用的确实不多。
事件的声明:声明事件之前一定要声明委托类型,或者用C#自带的委托类型如Action<>之类的。
using System;
class A
{
public static void onable()
{
prog.newevent += show;
}
public static void show()
{
Console.WriteLine("123");
}
}
class prog
{
public delegate void howshow();
public static event howshow newevent;
public static void happenevent()
{
newevent();
}
}
class progMain
{
public static void Main(string[] argv)
{
A.onable();
prog.happenevent();
//prog.newevent();
//不能在内外直接调用事件
}
}
//注:以上程序均使用static主要还是因为我比较懒,语法上并未规定一定要用static
三个类,我们把它分别叫做发布器类(prog),订阅类(A),触发类(progMain),使用方法基本上就是这样了。稍微了解以下编译器如何实现事件。
C#编译器编译时把它转换为一个私有的委托和两个方法,两个方法是为了提供登记对某个事件的方法(用+=的时候)和注销对某个事件的关注的方法(用-=的时候)。因为提供的委托是私有类型的,所以事件相较于委托有个非常大的区别,event 只能在所声明的类的内部调用,但是在别的类中可以进行 += 和 -= 操作。
本来想讲讲反射的但是反射有点多,所以只能留到下章了。