1.
总是用属性 (
Property
)
来代替可访问的数据成员
2.在 readonly 和 const 之间,优先使用 readonly
3. 在 as 和 强制类型转换之间,优先使用 as 操作符
4.使用条件属性 ( Conditional Attributes ) 来代替条件编译语句 #if
5. 总是为自定义类重载 ToString 方法 6.区别值类型和引用类型
7.使用不可变的值类型( Immutable Atomic Value Types )
8. 在值类型中,确保0是一个合法的数据
9.理解 ReferenceEquals , static Equals , instance Equals 和 比较运算符 (==) 之间的关系
10. 理解 GetHashCode 方法的缺陷
11. 在编写循环时,优先使用 foreach .
12. 在定义变量的时候就将其初始化
13. 使用静态构造函数来初始化静态成员变量
14. 用多个构造函数时,利用构造函数链
15. 使用 using 和 try / finally 来处理资源的释放
16. 尽量避免产生资源垃圾
17. 尽量避免使用装箱 ( boxing ) 和拆箱 ( unboxing )
18. 实现类的 Dispose 方法
19. 在接口和继承 ( Inheritance ) 之间,优先使用接口 ( interface )
20. 区分接口和重载 ( overrides )
21. 用委托 ( delegate ) 来实现回调 ( callback )
22. 用事件 ( event ) 来定义外部接口
23. 避免返回类内部成员的引用 24. 使用元数据来控制程序
25. 优先使用可序列化 ( serilizable ) 类型
26. 对需要排序的对象实现 IComparable 和 IComparer 接口
27. 避免使用 ICloneable 接口
28. 避免使用类型转换操作符
29. 只有当基类加入了与派生类中现有的函数名称相同的函数时,才需要使用 new 操作符
30. 尽量使用 CLS-Compliant
31. 尽量编写短少,简单的函数
32. 尽量编写比较小的程序集 ( assembly )
33. 限定类型的可见性 ( visibility )
34. 编写大粒度的 web API
35. 在使用事件时,优先继承基类事件,而不是重新创建一个事件
36. 多使用 framework 的运行时调试 (DEBUG, TRACE, EVENTLOG 等 )
37. 使用 .net 标准的配置机制
38. 使用并且在类中支持 .net 的数据绑定功能 ( Data Binding )
39. 使用 .net 的验证机制 ( Validation )
40. 根据你的需求选择正确的集合类 ( Collection )
41. 在自定义结构中使用 DataSet
42. 利用属性 ( Attributes )
43. 不要过度使用反射 ( Reflection )
44. 创建完整的,应用程序特定的异常
45. 尽可能多的考虑程序可能出现的异常,并作出处理
46. 尽可能少的使用 Interop
47. 尽量使用安全代码 ( safe code )
48. 多多学习、使用外部工具和资源
49. 准备使用 C# 2.0
50. 学习 ECMA 标准
2.在 readonly 和 const 之间,优先使用 readonly
3. 在 as 和 强制类型转换之间,优先使用 as 操作符
4.使用条件属性 ( Conditional Attributes ) 来代替条件编译语句 #if
5. 总是为自定义类重载 ToString 方法 6.区别值类型和引用类型
7.使用不可变的值类型( Immutable Atomic Value Types )
8. 在值类型中,确保0是一个合法的数据
9.理解 ReferenceEquals , static Equals , instance Equals 和 比较运算符 (==) 之间的关系
10. 理解 GetHashCode 方法的缺陷
11. 在编写循环时,优先使用 foreach .
12. 在定义变量的时候就将其初始化
13. 使用静态构造函数来初始化静态成员变量
14. 用多个构造函数时,利用构造函数链
15. 使用 using 和 try / finally 来处理资源的释放
16. 尽量避免产生资源垃圾
17. 尽量避免使用装箱 ( boxing ) 和拆箱 ( unboxing )
18. 实现类的 Dispose 方法
19. 在接口和继承 ( Inheritance ) 之间,优先使用接口 ( interface )
20. 区分接口和重载 ( overrides )
21. 用委托 ( delegate ) 来实现回调 ( callback )
22. 用事件 ( event ) 来定义外部接口
23. 避免返回类内部成员的引用 24. 使用元数据来控制程序
25. 优先使用可序列化 ( serilizable ) 类型
26. 对需要排序的对象实现 IComparable 和 IComparer 接口
27. 避免使用 ICloneable 接口
28. 避免使用类型转换操作符
29. 只有当基类加入了与派生类中现有的函数名称相同的函数时,才需要使用 new 操作符
30. 尽量使用 CLS-Compliant
31. 尽量编写短少,简单的函数
32. 尽量编写比较小的程序集 ( assembly )
33. 限定类型的可见性 ( visibility )
34. 编写大粒度的 web API
35. 在使用事件时,优先继承基类事件,而不是重新创建一个事件
36. 多使用 framework 的运行时调试 (DEBUG, TRACE, EVENTLOG 等 )
37. 使用 .net 标准的配置机制
38. 使用并且在类中支持 .net 的数据绑定功能 ( Data Binding )
39. 使用 .net 的验证机制 ( Validation )
40. 根据你的需求选择正确的集合类 ( Collection )
41. 在自定义结构中使用 DataSet
42. 利用属性 ( Attributes )
43. 不要过度使用反射 ( Reflection )
44. 创建完整的,应用程序特定的异常
45. 尽可能多的考虑程序可能出现的异常,并作出处理
46. 尽可能少的使用 Interop
47. 尽量使用安全代码 ( safe code )
48. 多多学习、使用外部工具和资源
49. 准备使用 C# 2.0
50. 学习 ECMA 标准