前面介绍了C#中的委托,事件的很多部分都与委托类似。实际上,事件就像是专门用于某种特殊用途的简单委托,事件包含了一个私有的委托,如下图所示:

有关事件的私有委托需要了解的重要事项如下:
1、事件提供了对它的私有控制委托的结构化访问。我们无法直接访问该委托。 2、事件中可用的操作比委托要少,对于事件我们只可以添加、删除或调用事件处理程序。 3、事件被触发时,它调用委托来依次调用调用列表中的方法。
发布者(Publisher):发布某个事件的类或结构,其他类可以在该事件发生时得到通知。订阅者(Subscriber):注册并在事件发生时得到通知的类或结构。事件处理程序(event handler):由订阅者注册到事件的方法,在发布者触发事件时执行。触发(raise)事件:调用(invoke)或触发(fire)事件的术语。当事件触发时,所有注册到它的方法都会被依次调用。抽象方法是一种没有方法体(没有具体实现)的方法,它只定义了方法的签名(返回类型、方法名、参数),而具体的实现留给派生类去完成。
csharp
// 抽象方法必须在抽象类中
public abstract class Animal
{
// 抽象方法:没有方法体,以分号结束
public abstract void MakeSound();
// 普通方法:可以有具体实现
public void Eat()
{
Console.WriteLine("动物正在进食");
}
}
常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。常量可以被当作常规的变量,只是它们的值在定义后不能被修改。
整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。
整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。
这里有一些整数常量的实例:
csharp212 /* 合法 */
215u /* 合法 */
0xFeeL /* 合法 */
078 /* 非法:8 不是一个八进制数字 */
032UU /* 非法:不能重复后缀 */