CLR via C# 读书笔记1-7

时间:2022-02-20 10:14:43

通用类型系统 Common Type System (CTS)

CLR 中的各种类型扮演了最终要的角色,它们决定了一种程序语言与另一种程序语言交互的机制。基于此点 Microsoft 建立一个规范—通用类型系统 Common Type System (CTS)—它描述了类型怎样定义及行为。
PS: Microsoft 已经向 ECMA 提交了 CTS (连同 .NET Framework 中的文件格式, metadata, IL,以及 P/Invoke) 作为一种规范的申请。这个规范称之为Common Language Infrastructure (CLI) 也就是 ECMA-335。另外Microsoft 也提交了 FCL, C# 程序语言(ECMA-334) 以及 C++/CLI 程序语言。
详情可参照 ECMA 官网: http://www.ecma-international.org
或者 Microsoft 官网:http://msdn.microsoft.com/en-us/netframework/aa569283.aspx http://www.microsoft.com/openspecifications/en/us/programs/community-romise/default.aspx.
CTS 规范指出一个类型可以包含0个或多个成员,以下是摘要:
■ 字段(Field)
■ 方法(Method)
■ 属性(Property)
■ 事件(Event)

CTS 也规范了各成员的可见类型:
■ Private: 仅对自身可见
■ Family: 仅对派生类可见(不管是否在同一程序集中),许多语言(如 C++, C#) 把这视为 protected
■ Family 及 Assembly: 仅对同一程序集中派生类可见,许多语言(如 C++, C#)不支持,IL Assembly 语言支持
■ Assembly: 仅对同一程序集中的类可见,许多语言视之为 internal
■ Family 或 assembly: 对派生类可见(不管是否在同一程序集中),对同一程序集中的类也可见。C# 视为 protected internal
■ Public 对所有程序集的所有类型都可见

CTS 还定义了类型继承,虚拟方法,对象生命期等规则,这些规则不需要死记硬背,许多规则你选择的开发语言已经限定了,另外的会提示你。比如 CTS 只允许继承自一个父类,而 C++ 允许继承自多个类,Microsoft’s C++/CLI 编译器在遇到这种情跨功能的时候就会提示一个编译错误。

这里还提一个 CTS 规则:所有类型都集成自一个预定义类型(System.Object)。

介于此所有的类型都具有以下的成员函数/功能:
■ 比较两个实例是否相等Compare two instances for equality.
■ 获取实例的 hash 值code for the instance.
■ 获取实例的类型
■ 对实例进行 shallow (bitwise) 拷贝
■ 获取实例当前状况的 string 表述