这本书讲解C#语言十分详细,我将其中的重要内容整理成条款,以备忘。
1..NET 由三部分组成:CLR ,编码工具和 BCL 。CLR 负责内存管理、代码安全验证、代码执行、垃圾收集。.NET 提供平台调用( P/Invoke ), 允许调用 Windows API ,而且还可以和 COM 进行交互操作。
2. .NET 开发人员可以不必了解 COM 的知识,无需考虑诸如 IUnknown 接口,类型库,引用计数,注册表以及 HRESULT(COM 使用 HRESULT) 数据类型返回运行时错误代码,而 .NET 不使用 HRESULT ,因为所有的运行时错误都会产生异常。
3. .NET 语言的编译器接受源代码文件,输出文件为程序集。程序集中的代码并不是本地代码,而是CIL 。程序集中包含CIL ,程序集中使用的类型的元数据以及对其他程序集引用的元数据。
4. CLR 在运行时首先检查程序集的安全特性,然后在内存中分配空间,再把程序集中被调用到的 代码送进 JIT 。程序集中的 CIL 只有在被调用到时才会被 JIT 编译成本地代码,然后就被缓存起来以备在后来的程序中执行,即不被调用的代码不会被编译成本地代码,而且被调用到的代码只被编译一次。一旦CIL 被编译成本地代码,CLR 就会在运行时进行管理,如:释放内存、检查数组边界、检查参数类型、管理异常等。
5.运行在CLR ,并且在运行时受CLR 控制的代码叫做托管代码,反之为非托管代码。
6. CLI( 公共语言基础结构 ) 是一组阐述了系统的架构、规则和约定的规范。包含 CTS: 定义了一组丰富的内置类型,定义了每种类型确定的详细的特性 , 而且所有支持 .NET 的语言提供的类型通常会映射到 CTS 中已定义的内置类型集的某一个特殊子集;CLS :详细说明了支持 .NET 语言的规则、属性和行为,其主题包括数据类型、类结构和参数传递。
7. 任何以 .NET 平台作为目标的语言必须建立它的数据类型与CTS 的类型间的映射。所有 .NET 语言共享这一类型系统,实现他们之间无缝的互操作,这个方案提供了语言之间的继承性。
8. 由于CLS 是CTS 的子集 , 这意味着一种语言特征可能符合CTS 标准,但却超过了CLS 的规范,如:C#语言支持无符号数字类型,该特征能通过 CTS 测试,但 CLS 却仅仅识别有符号数字类型。因此,如果用户在一个组件类使用 C# 的无符号类型,就可能无法与不支持无符号类型的语言(如 VB.NET )设计的组件实现互操作,但并非不可能,实际上,用户能够安全实现含有 private 成员的组件,CLS 兼容性问题。但如果用户需要 .NET 语言的互操作性,那么用户的组件中的 public 成员必须完全符合 CLS 规范。
9. @ 字符只能放在标识符的首位,标识符的命名风格有两种:Pascal 风格,如:CarDeck ,建议用于类型名和成员名;Camel 风格,如:totalCycleCount ,建议用于本地变量和方法参数。
10.两个公共约定:字段名称使用下划线开头:example 或使用 m_ 开头: m_example 。
11. 在C#语言中,可以使用任意的占位符和任意数量的值,值可以以任何顺序使用,值可以在格式字符串中替换任意次。例如: Console.WriteLine(”Three integers are {1}, {0}, {1}.”, 3, 6); 输出为 Three integers are 6, 3,6.
12. 占位符不能引用值列表以外位置的值,如果这样做了,不会产生编译错误,但会产生运行时错误 ( 异常 ) 。
【编辑推荐】