[翻译]C#编码规范(一)命名约定与风格

(C# Coding Standard有多个版本,本文根据较新的2.31版本翻译。)
对于第4条,我习惯直接用camel风格。

一、命名约定与风格
1、采用Pascal风格命名类型、方法和常量:
public class SomeClass 

   
const int DefaultSize = 100
   
public void SomeMethod() 
   {} 
}
2、采用camel风格命名局部变量和方法参数:
void MyMethod(int someNumber) 

   
int number; 
3、命名接口时采用I作为前缀:
interface IMyInterface 
{
4、命名私有成员变量时采用m_作为前缀,m_后面的部分采用Pascal风格:
public class SomeClass 

   
private int m_Number; 
5、自定义特性类采用Attribute作为前缀。
6、自定义异常类采用Exception作为前缀。
7、命名方法时使用动宾结构短语,例如ShowDialog()
8、有返回值的方法应该有能描述其返回值的名称,例如GetObjectState()
9、采用描述性的变量名。
    1)避免单字符的变量名,例如i或t,而是采用indextemp代替。
    2)对public和protected成员避免使用匈牙利命名法。
    3)不要使用缩写(例如将number缩写为num)。
10、总是使用C#预定义的类型,而不是使用System命名空间中的别名。例如:
object NOT Object 
string NOT String 
int    NOT Int32 
11、类型名称的首字母通常使用大写。 当处理.NET类型Type时保留后缀Type
// 正确: 
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; 

16、使用委托推断而不是显式实例化委托。 

delegate void SomeDelegate(); 
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、声明本地变量尽可能接近第一次使用。
22、文件名应该体现它包含的类。
23、当使用分部类型且分别分配到一个文件时,每个文件以逻辑部分命名。例如:
//In MyClass.cs 
public partial class MyClass 
{
//In MyClass.Designer.cs 
public partial class MyClass 
{
24、允许花括号({)放置在新一行
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、没有参数的匿名方法使用空的圆括号只有在匿名方法可能被使用在任何委托上时省略括号:
delegate void SomeDelegate(); 
//正确  
SomeDelegate someDelegate1 = delegate() 
                             { 
                                MessageBox.Show(
"Hello"); 
                             }; 
//避免 
SomeDelegate someDelegate1 = delegate 
                             { 
                                MessageBox.Show(
"Hello"); 
                             }; 
27、Lambda表达式仿照普通方法的代码布局、排列和委托声明。省略变量类型和类型推断依赖,也使用圆括号。
elegate void SomeDelegate(string someString); 
 
SomeDelegate someDelegate 
= (name)=> 
                            { 
                               Trace.WriteLine(name); 
                               MessageBox.Show(name); 
                            };
28、当它们包含一个简单的语句时,只使用内嵌(in-line)的Lambda表达式。对内嵌的表达式避免要花括号或rerurn语句的多重声明。省略圆括号:
delegate void SomeDelegate(string someString); 
 
void MyMethod(SomeDelegate someDelegate) 
{
 
//正确:  
MyMethod(name=>MessageBox.Show(name)); 
 
//避免 
MyMethod((name)=>{Trace.WriteLine(name);MessageBox.Show(name);});
Tags:  命名约定 数据层 翻译

延伸阅读

最新评论

发表评论