catch (Exception ex) { // Catching general exception is bad... we will never know whether it // was a file error or some other error. // Here you are hiding an exception. // In this case no one will ever know that an exception happened. return \ } } 不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。
6)避免利用返回值作为函数的错误代码,应该在程序中使用异常来处理错误。
10 其他
10.1类型转换
1)尽量避免强制类型转换。
2) 如果不得不做类型转换,尽量使用as关键字安全的转换到另一个类型。
Dog dog=new GermanShepherd();
GermanShepherd shepherd=dog as GermanShepherd; if (shepherd!=null) {…}
10.2正确性与容错性要求 1)程序首先是正确,其次是优美
2)无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。
3)改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。
4)对所有的用户输入,必须进行合法性检查。
5)尽量不要比较浮点数的相等,如: 10.0 * 0.1 == 1.0 , 不可靠
6)程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机
是否联机等,对于明确的错误,要有明确的容错代码提示用户,在这样不确定的场合都使用Try Throw Catch。
7)单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。
10.3可重用性要求
1)重复使用的完成相对独立功能的算法或代码应抽象为asp.net服务或类。
2)asp.net服务或类应考虑OO思想,减少外界联系,考虑独立性或封装性。
3)避免让你的代码依赖于运行在某个特定地方的程序集。
10.4其他
1) 不要手动去修改任何机器生成的代码
a) 如果修改了机器生成的代码,修改你的编码方式来适应这个编码标准 b) 尽可能使用partial classes特性,以提高可维护性。(C#2.0新特性) 2)避免在一个程序集中(assembly)中定义多个Main()方法。
3)只把那些绝对需要的方法定义成public,而其它的方法定义成internal。
4)避免使用三元条件操作符。
5)除非为了和其它语言进行互动,否则绝不要使用不安(unsafe)的代码。
6)接口和类中方法和属性的比应该在2:1左右。
7)努力保证一个接口有3~5个成员。
8) 避免在结构中提供方法
a) 参数化的构造函数是鼓励使用的 b) 可以重载运行符
9)当早绑定(early-binding)可能的时候就尽量不要使用迟绑定(late-binding)。
10) 除了在一个构造函数中调用其它的构造函数之外,不要使用this关键字。
//Example of proper use of ‘this’ public class MyClass {
public MyClass(string message) { }
public MyClass():this(?Hello?) { } }
11) 不要使用base关键字访问基类的成员,除非你在调用一个基类构造函数的时候要解决一
个子类的名称冲突
//Example of proper use of ‘base’ public class Dog {
public Dog(string name) { }
virtual public void Bark(int howlong) { } }
public class GermanShepherd:Dog {
public GermanShepherd(string name):base(name) { }
override public void Bark(int howLong) {
base.Bark(howLong) } }
12) 生成和构建一个长的字符串时,一定要使用StringBuilder,而不用string