求知若饥,虚心若愚
使用Dontnet CLI编译运行
注意:CLI在这里指命令行接口(Command Line Inrterface)而不是公共语言基础框架(Common Language Infrastructure)
- dotnet new console来创建程序机架
- dotnet run 会自动编译并执行
- dotnet build 将生成程序集(assembly),一般是dll结尾的动态链接库,需要CLI寄宿代码
- dotnet test 可运行单元测试
命名规范
- 不要使用匈牙利命名法(不要为变量名称附加类型前缀,避免后续类型变更)
- 一般不要用双下划线的变量名,有极小可能会变微软使用为新关键字
- 老生常态的有不要随便用非通用的缩写,尽量命名准确
公共中间语言
- c#编译器将代码转为中间语言CIL(IL),即Common Intermediate Language
- 即时编译(JIT),虚拟执行系统即运行时编译CIL的过程
- 托管代码,代码在"代理"的上下文中执行,执行的流程则称为托管执行
- 托管数据,执行的控制转向数据,数据所需的内存是运行时自动分配和回收的
- 不仅仅是c#能转成CIL(当然要接入CLI还要符合其规范,比如CTS和CLS),实现了语言之间的互操作性以及平台可移植性
之所以叫托管,是因为运行时管理着诸如内存分配,安全性和JIT编译等方面,从而控制了主要的程序行为。执行不需要运行时的代码称为本机代码(native code)或非托管代码(unmanaged code)
公共语言基础框架
CLI是理解C#程序的执行环境以及C#如何与其他程序和库(甚至是用其他语言编写)进行无缝交互的一个重要规范
规范
- 虚拟执行系统(VES即常说的运行时,现在比较常用的是CLR公共语言进行时,ps:非程序运行中那个运行时)
- 公共中间语言,Common Intermediate Language-CIL
- 公共类型系统,Common Type System-CTS
- 公共语言规范,Common Language Specification-CLS
- 元数据,Metadata
- 框架,Framework
垃圾回收
- 不是CLI语言规范的一部分,但能让程序员更专注于程序功能上
- 一般是分代、支持压缩、基于mark-and-sweep(标记清除)的算法
元数据
描述 类型和程序中包含的文件,可供反射功能使用
- 程序或类库中每一个类型的描述
- 清单信息,包括与程序本身有关的数据,以及他依赖的库
- 在代码中嵌入的自定义特性,提供与特性所修饰的构造有关的额外信息