C#
一、C#概述
1.1 编译
1.1.1 源代码文件
- 拓展名
- C#编译器可以允许为C#源代码文件使用任何文件拓展名,但一般使用.cs
- 文件名
- 文件名和类名可以不一致
- 一个文件包含多个类
- 一个类拆分到多个文件中
- 文件名和类名可以不一致
1.1.2 编译
- 编译命令
- 取决于C#编译器的实现,没有标准规定
- 输出
- 程序集 assembly
- 可执行的应用程序文件 .exe
- 与WIN32可执行程序完全不同
- 需要依赖CLR才能运行
- 库 .dll
- 可以由另一个较大的程序引用的代码库
- dynamic link library 动态链接库
- 可执行的应用程序文件 .exe
- 程序集 assembly
1.2 C#语法基础
1.2.1 关键字
- 编译器利用关键字来识别代码的结构和组织方式
- 关键字提供了具体的语法
1.2.2 标识符
1.2.2.1 作用
- 标识程序员编写代码的构造
- 通过标识符可以引用所标识的构造
1.2.2.2 大小写风格
- Pascal大小写
- 每个单词的首字母大写
- 驼峰大小写
- 第一个字母小写,其他每个单词的首字母大写
1.2.2.3 @关键字
- 关键字附加 ‘@’ 前缀可作为标识符使用
1.2.3 Main
- C#程序从Main方法开始执行
- 关键字static和方法名Main始终是程序必需的
- static:启动程序的控制台不需要实例化类
- 返回值类型可以是void或者int
- int:非零表示程序执行出错
- 要么不带参数,要么接收一个字符串数组作为参数
- 接收命令行参数
1.2.4 空白
- 空白
一个或多个连续的格式字符(如制表符、空格和换行符) - 分号使C#编译器能忽略代码中的空白
- 空白可以增强代码可读性
1.2.5 命名规范
- 类名、方法名、属性
- 使用Pascal大小写风格
- 局部变量名
- 驼峰大小写风格
1.3 注释
- 带分隔符的注释
- /* */
- 单行注释
- XML带分隔符的注释
- 编译器会将注释放到单独的文本文件中
- /** **/
- XML单行注释
- ///
1.4 应用程序接口
- 一种数据类型的所有方法定义了这种类型的应用程序接口
- 一个程序集包含的所有类型构成这个程序集的API
1.5 语言结构-CLI
1.5.1 公共中间语言
- CIL(Common Intermediate Language)
- 处理器不能直接解释程序集,处理器只能理解机器码
- 程序集使用的是公共中间语言
- 虚拟执行系统或运行时 VES(Virtual Execution System)
- 即时编译JIT(Just-in-time compilation) 成机器码
- 内存分配
- 安全性
- 不需要运行时的代码称为非托管代码或本地代码
1.5.2 公共语言基础结构
- CLI(Common Language Infrastructure):
- VES
- CIL
- CTS(Common Type System)公共类型系统
- 为语言互操作性提供支持的类型系统
- CLS(Common Language Specification)公共语言规范
- 编写公共语言能访问的库的指导原则
- 元数据
- 描述数据的数据,使服务能被CLI识别
- 程序和类库中数据类型的描述
- 清单信息,包括与程序有关的数据以及依赖的库
- 嵌入代码中的自定义特性,提供与特性所修饰的构造有关的信息
- 描述数据的数据,使服务能被CLI识别
- BCL(Base Class Library)基类库
- 公共编程框架
- CLI的功能
- 语言互操作性
- 类型安全
- 代码访问安全性
- 垃圾回收
- 平台可移植性
- BCL
- 大型代码库,开发者不需要编写相应代码而直接使用其功能
1.6 C#和.net版本
1.7 CIL和ILDASM
- ILDASM(IL Disassembler)
- 将程序集(dll或exe)反汇编生成CIL代码
- 可以将CIL反编译成C#
- Red Gate Reflector
- ILSpy
- JustDecompile
- dotPeek
- CodeReflect