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