类型定义
更新:2007 年 11 月
可以从现有类型定义新类型。内置值类型、指针、数组和委托是在使用或引用为隐式类型时定义的。类型可以嵌套;即,一个类型可以是另一个类型的成员。
类型定义包括:
对该类型定义的任何属性。
类型的可见性。
类型的名称。
类型的基本类型。
该类型实现的任何接口。
每个类型的成员的定义。
属性
属性提供附加的用户定义元数据。属性几乎可以应用到任何语言元素(类型、属性、方法等)。
类型可访问性
所有类型都有一个可访问性修饰符,控制从其他类型对它们的可访问性。下表说明了运行库所支持的类型可访问性。
辅助功能 |
说明 |
---|---|
public |
所有程序集都可以访问此类型。 |
assembly |
只能在程序集内访问此类型。 |
嵌套类型的可访问性依赖于它的可访问域,该域是由已声明的成员可访问性和直接包含类型的可访问域这二者共同确定的。但是,嵌套类型的可访问域不能超出包含类型的可访问域。
在程序 P 内声明为类型 T 的嵌套成员 M 的可访问域是按以下方法定义的(注意,M 本身也可能是一个类型):
如果 M 的已声明可访问性为 public,那么 M 的可访问域就是 T 的可访问域。
如果 M 的已声明可访问性为 protected internal,那么 M 的可访问域就是 T 的可访问域与 P 的程序文本和从 T 派生的(在 P 之外声明的)任何类型的程序文本之间的交集。
如果 M 的已声明可访问性为 protected,那么 M 的可访问域就是 T 的可访问域与 T 和从 T 派生的任何类型的程序文本之间的交集。
如果 M 的已声明可访问性为 internal,那么 M 的可访问域就是 T 的可访问域与 P 的程序文本之间的交集。
如果 M 的已声明可访问性为 private,那么 M 的可访问域就是 T 的程序文本。
类型名称
通用类型系统对名称只有两种限制:
所有的名称都按 Unicode(16 位)字符串进行编码。
名称不允许有嵌入的(16 位)0x0000 值。
所有比较都是逐字节进行的,因此要区分大小写并与区域无关。
尽管类型可能引用来自其他模块和程序集的类型,但类型在一个模块内是完全定义的。类型名称只需要在程序集内唯一。要完全识别一个类型,其类型名称必须由包含此类型实现的程序集加以限定。有关更多信息,请参见指定完全限定的类型名称。
基本类型和接口
一个类型可以从另一个类型继承值和行为。通用类型系统不允许类型从多个基本类型进行继承。
一个类型可以实现任何数量的接口。要实现接口,类型必须实现该接口的所有虚拟成员。虚方法可以由派生的类型来实现,既可静态调用,也可动态调用。有关虚拟成员的更多信息,请参见类型成员。有关继承和接口的更多信息,请参见类和接口。
类型成员
类型的行为和状态是由类型的成员定义的,如事件、字段、嵌套类型、方法和属性。有关更多信息,请参见类型成员。