其他习惯
除了界面控件外,不要使用类型前缀。
比如:
使用名称amount,而不是intAmount;
类:
使用名词、名词短语命名。
比如:
publicclassFileStream;
方法:
使用动词、动词短语开始。
比如:
CreateUser(),RemoveAt()等;
接口:
以I开始,后面加上名词、名词短语、形容词命名。
比如:
IDisposable;
常量:
所有单词大写,多个单词之间用"_"隔开。
publicconststringPAGE_TITLE="Wele";
命名空间:
根本格式:
panyName/ProjectName.TechnologyName[.Feature][.Design]
a)panyName/ProjectName:
公司名、项目名称或产品名称;
b) TechnologyName:
稳定的、公认的技术名称或架构层次名称;
c) [.Feature][.Design]:
可选的功能与设计;
变量方法命名规如此
C#命名规X
1、用pascal规如此来命名方法和类.(第一个单词首字母大写,后面连接的每个单词首字母都大写〕
public class DataBase ;public void GetDataTable()2、类:
使用名词、名词短语命名。
比如:
publicclassFileStream;
2.用camel规如此来命名局部变量和方法的参数. (第一个单词不大写,后面连接的单词首字母大写)
public void AddUser(string userId, byte[] password)
{ string userName;}3.所有的成员变量前加前缀 _
public class Database
{ private string _connectionString; } 4.接口的名称加前缀 I
interface Ipare
{ int pare(); }5.自定义代码属性类以Attribute结尾
public class OperationAttribute :
Attribute 6.自定义的异常以Exception结尾
public class AppException :
Exception 7.方法的命名.一般将其命名为动宾短语,“动词+对象〞.
GetRecordData();GetPath();CreateFile();8.代码的缩进.要用Tab,而不要用space.
9.使用带有说明性的变量名。
〔a〕防止单字符串的变量名,使用类似于index或temp这样有意义的名字。
〔b〕对于public或protected类型的变量防止使用匈牙利表示法。
〔c〕不要缩写单词。
10.所有的类成员变量应该被声明在类的顶部,并用一个空行把它们和方法以与属性的声明区分开.
11.用有意义的名字命名namespace,如:
产品名、公司名.
12.建议局部变量在最接近使用它时再声明.
13.使用某个控件的值时,尽量命名局部变量. 14.把引用的系统的namespace和自定义或第三方的用一个换行把它们分开.
15.文件名要能反响类的内容,最好是和类同名,一个文件中一个类或一组关连类.
16.目录结构中要反响出namespace的层次.
17.大括号"{"要新起一行 .
18.在和你的代码缩进处于同一个级别处为该行代码添加注释
19单独方法要加注释字段〔一目了然的课一部详细说名〕
例如:
///
///
///
///
///
publicstringGetName〔intid〕{
return“xiaomi“;
}
名称应该说明“什么〞而不是“如何〞。
通过防止使用公开根底实现〔它们会发生改变〕的名称,可以保存简化复杂性的抽象层。
例如,可以使用GetNextStudent(),而不是GetNextArrayElement()。
命名原如此是:
选择正确名称时的困难可能明确需要进一步分析或定义项的目的。
使名称足够长以便有一定的意义,并且足够短以防止冗长。
唯一名称在编程上仅用于将各项区分开。
表现力强的名称是为了帮助人们阅读;因此,提供人们可以理解的名称是有意义的。
不过,请确保选择的名称符适宜用语言的规如此和标准。
1以下几点是推荐的命名方法。
1、防止容易被主观解释的难懂的名称,如方面名AnalyzeThis(),或者属性名xxK8。
这样的名称会导致多义性。
2、在类属性的名称中包含类名是多余的,如。
而是应该使用。
3、只要适宜,在变量名的末尾或开头加计算限定符〔Avg、Sum、Min、Max、Index〕。
4、在变量名中使用互补对,如min/max、begin/end和open/close。
5、布尔变量名应该包含Is,这意味着Yes/No或True/False值,如fileIsFound。
6、在命名状态变量时,防止使用诸如Flag的术语。
状态变量不同于布尔变量的地方是它可以具有两个以上的可能值。
不是使用documentFlag,而是使用更具描述性的名称,如documentFormatType。
〔此项只供参考〕
7、即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。
仅对于短循环索引使用单字母变量名,如i或j。
可能的情况下,尽量不要使用原义数字或原义字符串,如
Fori=1To7。
而是使用命名常数,如Fori=1ToNUM_DAYS_IN_WEEK以便于维护和理解。
8、用于事件处理的委托添加“EventHandler〞后缀
9、用于事件处理之外的那些委托添加“Callback〞后缀
10、不要给委托添加“Delegate〞后缀
11、用名词或名词词组来给类型命名,在少数情况下也可以用形容词词组来给类型命名
12、用动词或动词词组来命名方法
13、用名词、名词词组或形容词来命名属性
14、要用动词或动词短语来命名事件
15、要用名词或名词短语来命名字段
2小写规如此
大写
标识符中的所有字母都大写。
仅对于由两个或者更少字母组成的标识符使用该约定。
例如:
下表汇总了大写规如此,并提供了不同类型的标识符的示例。
标识符
大小写
样例
名字空间
Pascal
namespace{…}
类型
Pascal
publicclassStreamReader{…}
接口
Pascal
publicinterfaceIEnumerable{…}
方法
Pascal
publicclassObject{
publicvirtualstringToString();
}
属性
Pascal
publicclassString{
publicintLength{get;}
}
事件
Pascal
publicclassProcess{
publiceventEventHandlerExited;
}
字段(私有实例)
Camel
privatestringuserName;
字段(公共静态)
Pascal
publicstaticreadonlystringUserId;
枚举
Pascal
enumFileMode{Append,…}
参数
Camel
publicclassConvert{
publicstaticintToInt32(stringuserId);
}
3缩写
为了防止混淆和保证跨语言交互操作,请遵循有关区缩写的使用的如下规如此:
1不要将缩写或缩略形式用作标识符名称的组成局部。
例如,使用GetWindow,而不要使用GetWin。
2不要使用计算机领域中未被普遍承受的缩写。
3在适当的时候,使用众所周知的缩写替换冗长的词组名称。
例如,用UI作为UserInterface缩
写,用OLAP作为On-lineAnalyticalProcessing的缩写。
4在使用缩写时,对于超过两个字符长度的缩写请使用Pascal大小写或Camel大小写。
例如,使用HtmlButton或HTMLButton。
但是,应当大写仅有两个字符的缩写,如,System.IO,而不是System.Io。
5不要在标识符或参数名称中使用缩写。
如果必须使用缩写,对于由多于两个字符所组成的缩写请
使用Camel大小写,虽然这和单词的标准缩写相冲突。
4命名空间
1、给命名空间命名时的一般性规如此是使用公司名称,后跟技术名称和可选的功能与设计,如下所示。
panyName.TechnologyName[.Feature][.Design]
例如:
namespaceJadeBird.StudentManager //学员系统
namespaceJadeBird.StudentManager.Register //北学员注册模块
2、命名空间使用Pascal大小写,用点号分隔。
3、TechnologyName指的是该项目的英文缩写,或软件名。
4、命名空间和类不能使用同样的名字。
例如,有一个类被命名为Debug后,就不要再使用Debug作为一个名称空间名。
5文件命名
1文件名遵从Pascal命名法,无特殊情况,扩展名小写。
6类
1、使用Pascal大小写。
2、用名词或名词短语命名类。
3、使用全称防止缩写,除非缩写已是一种公认的约定,如URL、HTML
4、不要使用类型前缀,如在类名称上对类使用C前缀。
例如,使用类名称FileStream,而不是
CFileStream。
5、不要使用下划线字符(_)。
6、有时候需要提供以字母I开始的类名称,虽然该类不是接口。
只要I是作为类名称组成局部的整个单词的第一个字母,这便是适当的。
例如,类名称IdentityStore是适当的。
在适当的地方,使用复合单词命名派生的类。
派生类名称的第二个局部应当是基类的名称。
例如,ApplicationException对于从名为Exception的类派生的类是适当的名称,原因ApplicationException是一种Exception。
请在应用该规如此时进展合理的判断。
例如,Button对于从Control派生的类是适当的名称。
尽管按钮是一种控件,但是将Control作为类名称的一局部将使名称不必要地加长。
public class FileStream
public class Button
public class String
7 接口
以下规如此概述接口的命名指南:
1、用名词或名词短语,或者描述行为的形容词命名接口。
例如,接口名称Iponent使用描述性
名词。
接口名称ICustomAttributeProvider使用名词短语。
名称IPersistable使用形容词。
2、使用Pascal大小写。
3、少用缩写。
4、给接口名称加上字母I前缀,以指示该类型为接口。
在定义类/接口对〔其中类是接口的标准
实现〕时使用相似的名称。
两个名称的区别应该只是接口名称上有字母I前缀。
5、不要使用下划线字符(_)。
6、当类是接口的标准执行时,定义这一对类/接口组合就要使用相似的名称。
两个名称的不同之处
只是接口名前有一个I前缀。
以下是正确命名的接口的示例。
publicinterfaceIServiceProvider
publicinterfaceIFormatable
以下代码示例阐释如何定义Iponent接口与其标准实现ponent类。
public interface Iponent
{
// Implementation code goes here.
} public class ponent:
Iponent
{
// Implementation code goes here.
}
8枚举(Enum)
枚举(Enum)值类型从Enum类继承。
以下规如此概述枚举的命名指南:
1对于Enum类型和值名称使用Pascal大小写。
2少用缩写。
3不要在Enum类型名称上使用Enum后缀。
4对大多数Enum类型使用单数名称,但是对作为位域的Enum类型使用复数名称。
5总是将FlagsAttribute添加到位域Enum类型。
6不要命名“Reserved〞枚举值。
9参数
以下规如此概述参数的命名指南:
1、使用描述性参数名称。
参数名称应当具有足够的描述性,以便参数的名称与其类型可用于在大多数情况下确定它的含义。
2、对参数名称使用Camel大小写。
3、使用描述参数的含义的名称,而不要使用描述参数的类型的名称。
开发工具将提供有关参数的类型的有意义的信息。
因此,通过描述意义,可以更好地使用参数的名称。
少用基于类型的参数名称,仅在适合使用它们的地方使用它们。
4、不要使用保存的参数。
保存的参数是专用参数,如果需要,可以在未来的版本中公开它们。
相反,如果在类库的未来版本中需要更多的数据,请为方法添加新的重载。
5、不要给参数名称加匈牙利语类型表示法的前缀。
以下是正确命名的参数的示例。
TypeGetType(stringtypeName)
stringFormat(stringformat,args()Asobject)
10 方法
以下规如此概述方法的命名指南:
1使用动词或动词短语命名方法。
2使用Pascal大小写。
3以下是正确命名的方法的实例。
RemoveAll()
GetCharArray()
Invoke()
11属性(property)
以下规如此概述属性的命名指南:
1使用名词或名词短语命名属性。
2使用Pascal大小写。
3不要使用匈牙利语表示法。
4考虑用与属性的根底类型一样的名称创建属性。
例如,如果声明名为Color的属性,如此属
性的类型同样应该是Color。
请参阅本主题中后面的示例。
以下代码示例阐释正确的属性命名。
public class SampleClass
{
public Color BackColor {
// Code for Get and Set accessors goes here.
}
}
以下代码示例阐释提供其名称与类型一样的属性。
public enum Color
{
// Insert code for Enum here.
}
public class Control
{
public Color Color { get {
// Insert code here.
}
set { // Insert code here.}
}
}
以下代码示例不正确,原因是Color属性是Int类型的。
publicenumColor
{
//InsertcodeforEnumhere.
}
publicclassControl
{
publicintColor
{
//Insertcodehere
}
}
在不正确的示例中,不可能引用Color枚举的成员。
Color.Xxx将被解释为访问一个成员,
该成员首先获取Color属性〔C#中为int类型〕的值,然后再访问该值的某个成员〔该成
员必须是System.Int32的实例成员〕。
12事件
以下规如此概述事件的命名指南:
1、对事件处理程序名称使用EventHandler后缀。
2、指定两个名为sender和e的参数。
sender参数表示引发事件的对象。
sender参始
终是object类型的,即使在可以使用更为特定的类型时也如此。
与事件相关联的状态封装
在名为e的事件类的实例中。
对e参数类型使用适当而特定的事件类。
3、用EventArgs后缀命名事件参数类。
4、考虑用动词命名事件。
5、使用动名词〔动词的“ing〞形式〕创建表示事件前的概念的事件名称,用过去式表示事
件后。
例如,可以取消的Close事件应当具有Closing事件和Closed事件。
不要使用
BeforeXxx/AfterXxx命名模式。
6、不要在类型的事件声明上使用前缀或者后缀。
例如,使用Close,而不要使用OnClose。
7、通常情况下,对于可以在派生类中重写的事件,应在类型上提供一个受保护的方法〔称为
OnXxx〕。
此方法只应具有事件参数e,因为发送方总是类型的实例。
以下示例阐释具有适当名称和参数的事件处理程序。
publicdelegatevoidMouseEventHandler(objectsender,MouseEventArgse);
以下示例阐释正确命名的事件参数类。
publicclassMouseEventArgs:
EventArgs
{
intx;
inty;
publicMouseEventArgs(intx,inty)
{
this.x=x;
this.y=y;
}
publicintX
{
get
{
returnx;
}
}
publicintY
{
get
{
returny;
}
}
}
13常量(const)
以下规如此概述常量的命名指南:
所有单词大写,多个单词之间用"_"隔开。
如
publicconststringPAGE_TITLE="Wele";
13 字段
以下规如此概述字段的命名指南:
1、private、protected使用Camel大小写。
2、public使用Pascal大小写。
3、拼写出字段名称中使用的所有单词。
仅在开发人员一般都能理解时使用缩写。
字段名称不
要使用大写字母。
下面是正确命名的字段的示例。
classSampleClass
{
stringurl;
stringdestinationUrl;
}
4、不要对字段名使用匈牙利语表示法。
好的名称描述语义,而非类型。
5、不要对字段名或静态字段名应用前缀。
具体说来,不要对字段名称应用前缀来区分静态和非静态字段。
例如,应用g_或s_前缀是不正确的。
6、对预定义对象实例使用公共静态只读字段。
如果存在对象的预定义实例,如此将它们声明为
对象本身的公共静态只读字段。
使用Pascal大小写,原因是字段是公共的。
下面的代码
示例阐释公共静态只读字段的正确使用。