1. Readyonly
比const更灵活,只能赋值一次,必须在构造函数中赋值,否则将被赋默认值(适用于静态和Readonly字段)
2. 结构
- 结构是值类型
- 结构不支持继承,但可以派生于任意多个接口
- 结构永远提供一个不能重写的无参构造函数构造默认初始值,每次实例时(new)都会先执行,哪怕重写了带参构造函数。不能在结构体中给成员赋值
- 结构体可以不用new实例,然后分别给成员赋初始值,不赋初始值使用成员变量会出错
- 结构从system.valuetype继承
3.继承
C#类不支持多重继承,但可以派生于多个接口
-
虚方法 virtual, 重写虚方法需要在函数前加override
-
隐藏方法:如果签名相同的方法在基类和派生类都有,派生类会隐藏基类方法。结果是调用哪个类的方法取决于用于引用实例的类型
-
抽象类和抽象函数 abstract: 抽象类不能实例化,抽象函数没有执行代码,必须在派生类中重写。有抽象函数的类为抽象类 (有接口还有意义?)
-
密封类和密封函数 sealed:对类,不能被继承;对方法,不能重写该方法。
-
接口: 接口成员总是公共的
4 运算符
- is 运算符: 检查对象是否和特定类型兼容,兼容是指对象是该类型或者派生于该类型
6 委托和事件
- 给定委托的实例可以表示任何类型的任何对象上的实例方法或静态方法(只要方法的特征匹配于委托的特征即可)
- 多播委托:多播委托必须返回void(编译器自动把返回void的委托认为是多播委托)
7程序集
- 程序集由描述它的元数据、描述导出类型和方法的类型元数据、MSIL代码和资源组成。这些部分分布在一个或者多个文件中
- 所有C#项目类型都会创建一个程序集(dll或者exe)。 注:可以通过csc创建dll模块不是程序集
- 工具:.Net consumer, .Net extender,
- 查看全局程序集缓存:ngen /show ; 或 进入<windir>/assembly