1.使用属性而不是可访问的数据成员
2.用运行时常量(readonly)而不是编译期常量(const)
编译期常量与运行时常量行为的不同之处在于对他们的访问方式不同,编译期常量的值是在目标代码中进行替换的。运行时常量将在运行时求值。
编译期常量仅能用于数字和字符串。运行时常量也是一种常量,因为在构造函数执行后不能被再次修改。二者的区别在于,只读的值将在运行时给出,这必然会带来更好的灵活性。
3.推荐使用is或as操作符而不是强制类型转换
as操作符并不能配合值类型使用。
object o=Factory.GetObject(); MyType t = null; if(o is MyType) t = o as MyType
这个例子并不高效,且有些累赘。若你准备使用as进行类型转换,那么is检查就毫无必要,只要检查返回值是否为null即可。
使用强制类型转换,我们需要同时检查其是否为null并捕获异常,若是as只需要检查返回的引用是否为null即可。
4.使用Conditional特性而不是#if条件编译
条件编译将会在最终release版本中留下一个名为***()的空方法,但它在release和debug版本中都将被调用。虽然在release版本中什么都不做但是方法的加载、JIT编译和调用仍旧有些开销。
使用Conditional特性
[Conditional("DEGUB")] private void CheckState() { //check code }
注意:Conditional特性方法都返回void类型且不接受任何参数。
使用Conditional特性生成的IL要比使用#if是更有效。同时,将其限制在函数层面上可以更加清晰的将条件性的代码分离出来。