第七章 类型成员及其访问限定
Ø 7.1 类型成员
常数总是和类型而非它们的实例相关联,它们总是静态的。
不管使用何种编程语言,编译器总是先对我们的源代码进行处理,然后为每一种成员产生相关的元数据,并为其中的方法成员产生IL代码。元数据的格式和编程语言之间无任何关系,这使得CLR成为名副其实的“通用语言运行时”。元数据信息对于所有语言都是通用的,这使得一门编程语言可以无缝地访问另一门语言编写的代码。
元数据在整个微软.NET框架开发平台中占据着关键的角色,正是有了它,所有的语言,类型,对象才得以实现无缝集成。
Ø 7.2 访问限定修饰符和预定义特性
嵌套类型(可以看作成员)可以使用以上六种访问修饰符中的任何一种。而非嵌套类型则只能标示为Public或者Assembly,因为其他的访问限定修饰符没有任何意义。如果一个非嵌套类型没有显式标示访问修饰符,C#和VB将默认使用Assembly来标识。
Ø 7.2.1 类型预定义特性
1.Abstract 2. Sealed
Ø 7.2.2 字段预订义特性
1.Static 2.ReadOnly
常数总被认为Static,也不能用Readonly来标记
Ø 7.2.3 方法预订义特性
Static Instance Virtual new override abstract sealed
虚方法仅应用于实例(非静态)方法
Ø 6.4 静态类
在C#中,要用static关键字定义不可实例化的类。这个关键字只能应用于类,不能应用于结构(值类型),但可以用于结构成员。
C#编译器对静态类做了如下限制:
1. 静态类必须直接从System.Object派生,从其他任何基类派生没有任何意义。
2. 静态类不能实现任何接口,这是因为只有使用类的一个实例时,才可以调用类的接口方法。
3. 静态类不能作为字段、方法参数和局部变量使用,因为它们都代表了一个实例的变量,而这是不允许的。
使用关键字static定义一个类,将导致C#编译器将该类同时标记为abstract和sealed。另外,编译器不会在类型中生成一个实例构造器方法。
Ø 6.5 部分类
Partial这个关键字告诉C#编译器,一个类、结构或者接口的定义源代码可能要分散到一个或者多个源代码文件中。
Ø 6.6 组件、多态和版本控制
在.NET中,版本号包含4个部分:主版本号(major version)、次版本号(minor version)、内部版本号(buildnumber)和修订号(revision).major/minor部分通常代表程序集的一个连续的,稳定的功能集,而build和revision部分通常代表对这个功能集的一次维护。