黑马程序员技术交流社区

标题: C#编码好习惯 [打印本页]

作者: 刘欢(安阳)    时间: 2012-10-8 20:55
标题: C#编码好习惯
●1.  避免将多个类放在一个文件里面。  

●2.  一个文件应该只有一个命名空间,避免将多个命名空间放在同一个文件里面。

●3.  一个文件最好不要超过500行的代码(不包括机器产生的代码)。

●4.  一个方法的代码长度最好不要超过25行。

●5.  避免方法中有超过5个参数的情况。使用结构来传递多个参数。

●6.  每行代码不要超过80个字符。

●7.  不要手工的修改机器产生的代码。

a)  如果需要编辑机器产生的代码,编辑格式和风格要符合该编码标准。

b)  Use partial classes whenever possible to factor out the maintained portions.  

●8.  避免利用注释解释显而易见的代码。

a)  代码应该可以自解释。好的代码由可读的变量和方法命名因此不需要注释。

●9.  Document only operational assumptions, algorithm insights and so on.   

●10.  避免使用方法级的文档。

a)  使用扩展的API文档说明之。

b)  只有在该方法需要被其他的开发者使用的时候才使用方法级的注释。(在C#中就是///)

●11.  不要硬编码数字的值,总是使用构造函数设定其值。

●12.  只有是自然结构才能直接使用const,比如一个星期的天数。

●13.  避免在只读的变量上使用const。如果想实现只读,可以直接使用readonly。

public class MyClass  
{  
   public readonly int Number;  
   public MyClass(int  someValue)  
   {  
      Number = someValue;  
   }  
   public  const int  DaysInWeek = 7;  
}  

●14.  每个假设必须使用Assert检查

a)  平均每15行要有一次检查(Assert)

using System.Diagnostics;  
object GetObject()  
{…}  
object obj = GetObject();  
Debug.Assert(obj != null);  

●15.  代码的每一行都应该通过白盒方式的测试。

●16.  只抛出已经显示处理的异常。

●17.  在捕获(catch)语句的抛出异常子句中(throw),总是抛出原始异常维护原始错误的堆栈分配。

catch(Exception exception)  
{     
   MessageBox.Show(exception.Message);  
   throw ;  //和throw exception一样。  
}  

●18.  避免方法的返回值是错误代码。

●19.  尽量避免定义自定义异常类。

●20.  当需要定义自定义的异常时:

a)  自定义异常要继承于ApplicationException。

b)  提供自定义的序列化功能。

●21.  避免在单个程序集里使用多个Main方法。

●22.  只对外公布必要的操作,其他的则为internal。

●23.  Avoid friend assemblies, as it increases inter-assembly coupling.

●24.  Avoid code that relies on an assembly running from a particular location.  

●25.  使应用程序集尽量为最小化代码(EXE客户程序)。使用类库来替换包含的商务逻辑。

●26.  避免给枚举变量提供显式的值。

//正确方法   
public enum Color  
{     
   Red,Green,Blue  
}  
//避免
public enum Color  
{     
   Red = 1,Green =  2,Blue = 3  
}  

●27.  避免指定特殊类型的枚举变量。

//避免   
public enum Color  : long  
{     
   Red,Green,Blue  
}  

●28.  即使if语句只有一句,也要将if语句的内容用大括号扩起来。

●29.  避免使用trinary条件操作符。

●30.  避免在条件语句中调用返回bool值的函数。可以使用局部变量并检查这些局部变量。

bool IsEverythingOK()  
{…}  
//避免  
if (IsEverythingOK ())  
{…}  
//替换方案   
bool ok = IsEverythingOK();  
if (ok)  
{…}  

●31.  总是使用基于0开始的数组。

●32.  在循环中总是显式的初始化引用类型的数组。

public class MyClass  
{}  
MyClass[] array = new  MyClass[100];  
for(int index = 0; index < array.Length;  index++)  
{  
   array[index] = new  MyClass();  
}  

●33.  不要提供public 和 protected的成员变量,使用属性代替他们。

●34.  避免在继承中使用new而使用override替换。


作者: 许庭洲    时间: 2012-10-9 09:24
值得学习,值得分享!
作者: 飞翔的33    时间: 2012-10-9 11:10
感谢楼主分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2