C# 编码标准


一、编码实践

1、一个文件的代码避免超过500行。当然这个在特殊情况下也是可以的,只是一个建设吧!

2、方法要避免超过25行。当然这个在特殊情况下也是可以的,只是一个建设吧!

3、每行不要超过80个字符。

4、不要手动编辑任何机器代码。

5、避免对显而易见的代码作注释,代码应该是自解释的,由可读性强的变量和方法组成的好的代码应该不需要注释。

6、除了“0”与“1”, 不要用数值硬编码,声明一个常量代替。

7、仅对本来就是常量的值使用const修饰符,例如一周的天数。

8、避免对只读的变更使用const,在此情况下,使用readonly修饰符:

复制代码
public class MyClass
{
     public const int DaysInWeek = 7;
     public readonly int Number;

     public MyClass(int someValue)
     {
           Number = someValue;
     }                 
}    
复制代码

9、仅捕捉你需要显式处理的异常。

10、在抛出异常的catch语句中,总是抛出最初异常(或由最初异常构建的另一个异常),以保持最初错误的堆栈位置。

复制代码
第一种:
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
    throw;     // 等同于抛出原始异常
}
第二种:
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
    throw ex;     // 这样会吃掉异常点,重置堆栈中的异常起始点
}
第三种:
catch
{
    throw;  // 可捕获所有类型的异常
}
第四种:
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
    throw new Exception("经过进一步包装的异常", ex);  // 经过进一步包装的异常,第二个参数保存了原来的异常信息
}
推荐使用第一种用法
复制代码

11、最小化应用程序的程序集代码(即EXE客户端程序集)。用类库来包含业务逻辑。

12、避免显式类型转换。使用as操作符防御性地进行转换类型:

复制代码
Dog dog = new GermanShepherd();
GermanShepherd shepherd = dog as GermanShepherd;
if (shepherd != null)
{
   ...   
}
复制代码

13、调用委托前始终检查委托是否为空。

14、不要假定一种类型能支持某个接口。防御性地为接口查询是否支持该接口。

复制代码
SomeType obj1;
IMyInterface obj2;

obj2 = obj1 as IMyInterface;
if(obj2 != null)
{
   obj2.Method1();   
}
else
{
    ...
}
复制代码

15、永远不要硬编码将呈现给用户的字符串,而是使用资源。

16、永远不要硬编码布署时可能修改的字符串,例如连接字符串。

17、用String.Empty代替"":

// 避免
string name = "";

//推荐
string name = String.Empty;

18、当频繁地使用一个字符串超过4次,使用StringBuilder,不要使用string。

19、当提供一个静态成员变量时,总是提供一个静态构造函数。

20、除非在switch语句中跳转,否则永远不要用goto语句。

21、不要在使用泛型的代码中对System.Object进行类型转化。使用约束或as运算符:

复制代码
class SomeClass
{}
// 避免
class MyClass<T>
{
   void SomeMethod(T t)
   {
        object temp = t;
        SomeClass obj = (SomeClass)temp;
    }
}

// 建议
class MyClass<T> where T : SomeClass
{
    void SomeMethod(T   t)
    {
        SomeClass obj = t;
    }
}
复制代码

22、不要在泛型接口中定义约束条件。接口级别的约束常常可以用强类型代替:

复制代码
public class Customer
{...}

// 避免
public interface IList<T> where T : Customer
{...}
// 建议
public interface ICustomerList : IList<Customer>
复制代码

23、lock锁私有只读静态对象。不要使用lock (this)lock (typeof (MyType)) 和 lock ("myLock")等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值