(C# Coding Standard有多个版本本文根据较新的版本翻译)
对于第条我习惯直接用camel风格
一命名约定与风格
采用Pascal风格命名类型方法和常量
public class SomeClass
{
const int DefaultSize = ;
public void SomeMethod()
{}
}采用camel风格命名局部变量和方法参数
void MyMethod(int someNumber)
{
int number;
} 命名接口时采用I作为前缀
interface IMyInterface
{} 命名私有成员变量时采用m_作为前缀m_后面的部分采用Pascal风格
public class SomeClass
{
private int m_Number;
} 自定义特性类采用Attribute作为前缀
自定义异常类采用Exception作为前缀
命名方法时使用动宾结构短语例如ShowDialog()
有返回值的方法应该有能描述其返回值的名称例如GetObjectState()
采用描述性的变量名
)避免单字符的变量名例如i或t而是采用index或temp代替
)对public和protected成员避免使用匈牙利命名法
)不要使用缩写(例如将number缩写为num)
总是使用C#预定义的类型而不是使用System命名空间中的别名例如
object NOT Object
string NOT String
int NOT Int 类型名称的首字母通常使用大写 当处理NET类型Type时保留后缀Type
// 正确
public class LinkedList<KT>
{}
// 避免
public class LinkedList<KeyTypeDataType>
{}
使用有意义的命名空间例如产品名或公司名
避免使用完全限定的类型名称使用using语句代替
避免在命名空间内使用using语句
所有框架的命名空间都组合在一起并放在自定义或第三方的命名空间下
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemData;
using MyCompany;
using MyControls;
使用委托推断而不是显式实例化委托
delegate void SomeDelegate();
public void SomeMethod()
{}
SomeDelegate someDelegate = SomeMethod;
坚持严格的缩进不要使用制表符或非标准的缩进如一个空格推荐是三个或四个空格并且值应该是通过统一的
注释缩进和其代码在同一水平上
所有注释要经过拼写检查拼错注释表示开发草率
所有成员变量要声明在顶部空一行分开属性或方法
public class MyClass
{
int m_Number;
string m_Name;
public void SomeMethod()
{}
public void SomeMethod()
{}
} 声明本地变量尽可能接近第一次使用
文件名应该体现它包含的类
当使用分部类型且分别分配到一个文件时每个文件以逻辑部分命名例如 //In MyClasscs
public partial class MyClass
{}
//In MyClassDesignercs
public partial class MyClass
{} 允许花括号({)放置在新一行
匿名方法仿照普通方法的代码布局排列和委托声明(放置一个开放花括号在新一行) delegate void SomeDelegate(string someString);
//Correct:
void InvokeMethod()
{
SomeDelegate someDelegate = delegate(string name)
{
MessageBoxShow(name);
};
someDelegate(Juval);
}
//Avoid
void InvokeMethod()
{
SomeDelegate someDelegate = delegate(string name){MessageBoxShow(name);};
someDelegate(Juval);
}没有参数的匿名方法使用空的圆括号只有在匿名方法可能被使用在任何委托上时省略括号 delegate void SomeDelegate();
//正确
SomeDelegate someDelegate = delegate()
{
MessageBoxShow(Hello);
};
//避免
SomeDelegate someDelegate = delegate
{
MessageBoxShow(Hello);
}; Lambda表达式仿照普通方法的代码布局排列和委托声明省略变量类型和类型推断依赖也使用圆括号 elegate void SomeDelegate(string someString);
SomeDelegate someDelegate = (name)=>
{
TraceWriteLine(name);
MessageBoxShow(name);
};当它们包含一个简单的语句时只使用内嵌(inline)的Lambda表达式对内嵌的表达式避免要花括号或rerurn语句的多重声明省略圆括号: delegate void SomeDelegate(string someString);
void MyMethod(SomeDelegate someDelegate)
{}
//正确:
MyMethod(name=>MessageBoxShow(name));
//避免
MyMethod((name)=>{TraceWriteLine(name);MessageBoxShow(name);});