本章要点

主题要点
名称空间限定符为了避免名称空间限定的模糊性,可以使用::运算符强制编译器使用已创建好的别名。还可以使用global名称空间作为顶级名称空间的别名
定制异常从根类Exception中派生,就可以创建自己的异常类。这是有益的,因为可以更多地控制特定异常的捕获,并允许定制包含在异常中的数据,以高效地处理它
事件处理许多类都提供了事件,在代码中发生某个触发器时,就会引发这些事件。可为这些事件编写处理程序,在引发事件时执行代码。这种双向通信方式是响应代码的一种良好机制,不必编写可能要轮询对象以获知变化的复杂、令人感到费解的代码
事件定义可以定义自己的事件类型,这涉及给事件的处理程序创建指定的事件和委托类型。可以使用标准的、无返回类型的委托类型和派生于System.EventArgs的定制事件参数,使事件处理程序有多种用途。还可以使用EventHandlerEventHandler<T>委托类型,以便通过更简单的代码定义事件
匿名方法为使代码更便于阅读,常可以使用匿名方法来替代完整的事件处理方法。这表示,在添加事件处理程序的地方直接定义要在引发事件时执行的代码,为此需要使用delegate关键字
特性有时,或者是由于所用框架的要求,或者是由自己的需要,在代码中会用到特性。通过使用[AttributeName]语法,可以向类、方法和其他成员添加特性;通过System.Attribute派生,可以创建自己的特性。通过反射可读取特性值