12:变量声明时初始化优于赋值语句。
Prefer Variable Initializers to Assignment Statements。
若类的实例变量成员在声明时初始化,初始化代码会内联到该类的每个实例构造函数中:构造对象实例时,先执行初始化代码,再调用基类构造函数,最后执行构造函数中代码。
当构造函数有多个重载版本时,建议在定义字段时避免进行初始化,而应该将这些公共的初始化语句放在一个构造函数中,然后使其他的构造器显示地调用这个初始化构造函数。
13:使用静态构造器初始化静态类成员。
Initialize Static Class Members with Static Constructors.
若类中的静态变量成员在声明时初始化,初始化代码会内联到类的静态构造函数中:运行时,先执行初始化代码,再执行静态构造函数中的代码。建议:简单静态成员可以直接在声明时初始化,而可能产生异常的初始化则应放在静态构造函数中初始化。
14:利用构造器链。
Utilize Constructor Chaining.
只能使用this(args)(构造器链中的最后一个构造函数中调用Base))和base(args)中一个,不能同时使用。
15:利用using和try/finally语句来清理资源。
Utilize using and Try/finally for Resource Cleanup.
using所使用的对象必须继承IDisposable,且不支持运行时类型检查(可用as转换,但可能会隐藏bug,一般确保每一个实现了IDispose接口的对象分配在在using范围内)。
16:尽量减少内存垃圾。
Minimize Garbage.
使用类成员而代替每个函数中都用到的局部变量;使用Singleton模式来实现公用对象或将其实现为对象池。
17:尽量减少装箱与拆箱。
Minimize Boxing and Unboxing。
防止隐式装箱。eg:Console.WriteLine( "Number list:{0}, {1}, {2}",1,2,3 );=>Console.WriteLine( "Number list:{0}, {1}, {2}",1.ToString(),2.ToString(),3.ToString() );
18:实现标准Dispose模式。
Implement the Standard Dispose Pattern.
Dispose()应做的工作:释放所有非托管资源;释放所有托管资源,这包括取消事件绑定;设置标志位,标明对象已经释放;调用“GC.SuppressFinalize(this)”来避免GC再去掉用对象的析构函数。
如果父类和子类都使用了非托管资源,则子类在重载父类的Dispose()函数中,要记得显式调用父类的Dispose()。