明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

.NET命名規(guī)范中文版

[摘要]免使用由經(jīng)常使用的名稱空間復(fù)制的類型名。類型名不能使用下列詞語(yǔ)。System Collections Forms UI避免使用與常用關(guān)鍵詞沖突的標(biāo)識(shí)符。例如,避免使用下列詞語(yǔ)。 AddHandlerAddressOfAliasAndAnsiAsAssemblyAutoB...

免使用由經(jīng)常使用的名稱空間復(fù)制的類型名。類型名不能使用下列詞語(yǔ)。

System       Collections   Forms       UI



避免使用與常用關(guān)鍵詞沖突的標(biāo)識(shí)符。例如,避免使用下列詞語(yǔ)。

AddHandler

AddressOf

Alias

And

Ansi

As

Assembly

Auto

BitAnd

BitNot

BitOr

BitXor

Boolean

ByRef

Byte

ByVal

Call

Case

Catch

CBool

CByte

CChar

CDate

CDec

CDbl

Char

CInt

Class

CLng

CObj

Const

CShort

CSng

CStr

CType

Date

Decimal

Declare

Default

Delegate

Dim

Do

Double

Each

Else

ElseIf

End

Enum

Erase

Error

Event

Exit

ExternalSource

False

Finally

For

Friend

Function

Get

GetType

Goto

Handles

If

Implements

Imports

In

Inherits

Integer

Interface

Is

Let

Lib

Like

Long

Loop

Me

Mod

Module

MustInherit

MustOverride

MyBase

MyClass

Namespace

New

Next

Not

Nothing

NotInheritable

NotOverridable

Object

On

Option

Optional

Or

Overloads

Overridable

Overrides

ParamArray

Preserve

Private

Property

Protected

Public

RaiseEvent

ReadOnly

ReDim

Region

REM

RemoveHandler

Resume

Return

Select

Set

Shadows

Shared

Short

Single

Static

Step

Stop

String

Structure

Sub

SyncLock

Then

Throw

To

True

Try

TypeOf

Unicode

Until

Variant

When

While

With

WithEvents

WriteOnly

Xor

eval

extends

instanceof

package

var





標(biāo)識(shí)符(包括參數(shù)名)中不要使用縮寫。

如果必須使用縮寫:

任何超過(guò)兩個(gè)字符以上的縮寫都使用camel大寫格式,即使這不是標(biāo)準(zhǔn)縮寫。



名稱空間

命名名稱空間的一般規(guī)則如下:

CompanyName.TechnologyName



這樣,我們看到的名稱空間應(yīng)該是這樣的:

Microsoft.Office

PowerSoft.PowerBuilder



注意:這只是一個(gè)原則。第三方公司可以選擇其它的名字。



避免用公司名稱或其它著名品牌的名稱作為名稱空間的前綴,這樣會(huì)造成兩個(gè)公布的名稱空間有同一個(gè)名稱的可能性。(例如,將微軟提供的Office自動(dòng)類命名為Microsoft.Office。)



使用Pascal大寫方式,用逗號(hào)分隔邏輯成分(例如,Microsoft.Office.PowerPoint)。如果你的品牌使用的是非傳統(tǒng)大寫方式,那么一定要遵循你的品牌所確定使用的大寫方式,即使這種方式背離了通常的名稱空間大寫規(guī)則(例如,NeXT.WebObjects,和ee.cummings。)



該用復(fù)數(shù)的時(shí)候要使用復(fù)數(shù)的名稱空間名。例如,使用System.Collections而不是System.Collection。本規(guī)則的特例是品牌名稱和縮寫。例如:使用System.IO而不是System.IOs。



名稱空間和類不能使用同樣的名字。例如,有一個(gè)類被命名為Debug后,就不要再使用Debug作為一個(gè)名稱空間名。



類和類成分



類的命名原則

用名詞或名詞短語(yǔ)命名類。

使用Pascal大寫。

減少類名中縮寫的使用量。

不要使用任何類前綴(比如C)。

不要使用帶下劃線的字符。



下面是一些正確命名的類名的例子。

public class FileStream {

}

public class Button {



}

public class String {

}



接口命名原則

使用名詞或名詞短語(yǔ),或者描述行為的形容詞來(lái)命名接口。例如,IComponent(描述性名詞),ICustomAttributeProvider(名詞短語(yǔ)),和IPersistable(形容詞)。

使用Pascal大寫。

減少接口名中縮寫的使用量。

不要使用帶下劃線的字符。

在接口名前加前綴I,以表示這個(gè)類型是一個(gè)接口。

不要在類名前加上前綴C。偶而情況下,需要在類名前加上I而并不表示它是一個(gè)接口。在這種情況下,只要I后面的字符是小寫就可(例如,IdentityStore。)

當(dāng)類是接口的標(biāo)準(zhǔn)執(zhí)行時(shí),定義這一對(duì)類/接口組合就要使用相似的名稱。兩個(gè)名稱的不同之處只是接口名前有一個(gè)I前綴。



下面我們舉個(gè)例子,來(lái)看看接口IComponent和它的標(biāo)準(zhǔn)執(zhí)行,類Component。

public interface IComponent {

}

public class Component : IComponent {

}

public interface IServiceProvider{

}

public interface IFormatable {

}



屬性命名原則



在屬性的后面加上Attribute后綴,來(lái)自定義屬性類。如下例所示。

public class ObsoleteAttribute{

}



Enum命名原則

Enum需使用Pascal大寫。

Enum值名需使用Pascal大寫。

減少enum名中縮寫的使用量。

Enum名前不要加前綴(例如,adxxx表示ADO enums,rtfxxx表示多信息文本enum,等等。)。

在enum類型上不要加Enum后綴。

Enum名稱需使用單數(shù)名詞。

比特域使用復(fù)數(shù)名詞。

如果列舉值在參數(shù)或?qū)傩灾惺褂,需用一個(gè)enum來(lái)定義列舉值。這樣工具就可以知道一個(gè)屬性或參數(shù)可能的值了。



public enum FileMode{

Create,

CreateNew,

Open,

OpenOrCreate,

Truncate

}



如果數(shù)字值to be bitwise or'ed together,就使用Flags對(duì)屬性進(jìn)行自定義。



[Flags]

public enum Bindings {

CreateInstance,

DefaultBinding,

ExcatBinding,

GetField,

GetProperty,

IgnoreCase,

InvokeMethod,

NonPublic,

OABinding,

SetField

SetProperty,

Static

}



在封裝一個(gè)Win32 API時(shí),這個(gè)規(guī)則有一個(gè)特例。從一個(gè)Win32標(biāo)頭產(chǎn)生內(nèi)部定義是很常見(jiàn)的。你可以使用Win32大寫,這種形式下字母通常全部大寫。



使用Int32作為一個(gè)enum的基礎(chǔ)類型。

如果這個(gè)enum代表標(biāo)志,而且標(biāo)志又非常多(大于32),或者這個(gè)enum在將來(lái)可以發(fā)展成許多標(biāo)志,或者類型需要與類型int有所不同以便向后兼容時(shí),在這種情況下就產(chǎn)生了特例。



只有在值可以被完全表示為一組位標(biāo)志時(shí),才使用enum。開集不能使用enum(例如操作系統(tǒng)版,等等)。



只讀和Const字段名

用名詞,名詞短語(yǔ),或名詞的縮寫命名靜態(tài)字段。

用Pascal大寫命名靜態(tài)字段。

不要用匈牙利文類型的符號(hào)作靜態(tài)字段名的前綴。



參數(shù)名

使用描述性參數(shù)名。參數(shù)名應(yīng)該具有足夠的描述性,這樣在大多數(shù)情況下參數(shù)名和它的種類可以用來(lái)確定它的意思。

用camel大寫方式命名參數(shù)。

根據(jù)參數(shù)的意思來(lái)命名參數(shù),而不是根據(jù)參數(shù)的種類來(lái)命名。我們希望開發(fā)工具可以用很方便的方式提供關(guān)于參數(shù)種類的信息,這樣參數(shù)名可以得到更好的使用,可以對(duì)語(yǔ)義而不是對(duì)種類進(jìn)行描述。但是偶爾使用根據(jù)類型命名的參數(shù)名也是完全可以的。



不要使用保留參數(shù)。如果在下一個(gè)版本中需要更多的數(shù)據(jù),可以增加進(jìn)來(lái)。

不要用匈牙利文類型的符號(hào)作為字段名的前綴。



Type GetType (string typeName)

string Format (string format, object [] args)



方法命名原則

用動(dòng)詞或動(dòng)詞短語(yǔ)命名方法。

用下述范例所示的Pascal大寫方式命名方法。

RemoveAll()

GetCharArray()

Invoke()



屬性命名原則

用名詞或名詞短語(yǔ)命名屬性。

用Pascal大寫命名屬性。

屬性與類型要一樣。

用與一個(gè)類型的名稱相同的名字來(lái)命名屬性時(shí),就使這個(gè)屬性的類型成為那個(gè)類型。雖然聽起來(lái)有些奇怪,但這是正確的。下面的例子正確使用了屬性命名原則。

public enum Color {...}

public class Control {

public Color Color { get {...} set {...} }

}

下例就是不正確的。

public enum Color {...}

public class Control {

public int Color { get {...} set {...} }

}



在那個(gè)不正確的例子中,要想引用Color enum是不可能的,因?yàn)镃olor,Xxx會(huì)被翻譯成一個(gè)成員訪問(wèn),它會(huì)首先獲得Color屬性的值(int種類),然后再訪問(wèn)那個(gè)值的成員(它應(yīng)該是System.Int32的一個(gè)實(shí)例成員)。



事件命名原則

用EventHandloer后綴命名事件處理程序,如下列所示。

public delegate void MouseEventHandler(object sender, MouseEvent e);



使用名為sender和e的兩個(gè)參數(shù)。

Sender參數(shù)代表提出事件的對(duì)象。Sender參數(shù)永遠(yuǎn)是一個(gè)類型對(duì)象,即使它可能使用了更為特定的類型。



與事件相關(guān)的狀態(tài)被封裝在一個(gè)名為e的事件類范例中。要使用這個(gè)類型的正確的、特定的事件類。

public delegate void MouseEventHandler(object sender, MouseEvent e);



用EventArgs后綴命名事件自變量類,如下例所示。

public class MouseEventArgs : EventArgs {

int x;

int y;

public MouseEventArgs(int x, int y)

{ this.x = x; this.y = y; }

public int X { get { return x; } }

public int Y { get { return y; } }

}



命名事件名時(shí),需要有之前和之后的時(shí)態(tài)概念,因此要使用現(xiàn)在時(shí)態(tài)和過(guò)去時(shí)態(tài)(不要使用BeforeXxx\AfterXxx的方式)。例如,可以被取消的結(jié)束事件就有Closing事件和Closed事件。



public event ControlEventHandler ControlAdded {

//..

}



用動(dòng)詞命名事件。



區(qū)分大小寫

不要使用需要對(duì)大小寫作出區(qū)分的名稱。各成分不論是在區(qū)分大小寫還是不區(qū)分大小寫的語(yǔ)言下都必須是完全可用的。因?yàn)椴粎^(qū)分大小寫的語(yǔ)言不能在同樣的環(huán)境下對(duì)只有大小寫不同的兩個(gè)名稱作出辯別,所以成分必須避免這種情況。

不要產(chǎn)生兩個(gè)名稱相同只有大小寫不同的名稱空間。

namespace ee.cummings;

namespace Ee.Cummings;

帶有兩個(gè)參數(shù)的一個(gè)類型,其兩個(gè)參數(shù)的名稱不能只有大小寫不同。

void foo(string a, string A)

System.WinForms.Point p;

System.WinForms.POINT pp;

帶有兩個(gè)屬性的一個(gè)類型,其屬性的名稱不能只有大小寫不同。

int Foo {get, set};

int FOO {get, set}

帶有兩種方法的一個(gè)類型,其方法的名稱不能只有大小寫不同。

void foo();

void Foo();



避免類型名出現(xiàn)混淆



不同的語(yǔ)言使用不同的術(shù)語(yǔ)以識(shí)別基本管理類型。設(shè)計(jì)人員必須避免使用對(duì)語(yǔ)言有專門要求的術(shù)語(yǔ)。遵照本章說(shuō)明的規(guī)則,避免出現(xiàn)類型名稱混淆的情況。

使用語(yǔ)義上有意義的名稱,而不要使用類型名稱。

在很少見(jiàn)的情況下,參數(shù)除了類型以外語(yǔ)義上沒(méi)有任何意義,這時(shí)使用類屬名。例如,一個(gè)類支持將多種數(shù)據(jù)類型寫進(jìn)一個(gè)流中,這個(gè)類可能有下列方法:

void Write(double value);

void Write(float value);

void Write(long value);

void Write(int value);

void Write(short value);

上面的例子在下述對(duì)語(yǔ)言有專門要求的情況下是首選。

void Write(double doubleValue);

void Write(float floatValue);



void Write(long longValue);

void Write(int intValue);

void Write(short shortValue);



在極端情況下,每一個(gè)基本數(shù)據(jù)類型需要有唯一的命名方式,此時(shí)使用下面的通用類型名稱。

C# type name

Visual Basic type name

JScript type name

Visual C++ type name

IL representation

Universal type name

sbyte

SByte

SByte

char

I1

SByte

byte

Byte

byte

unsigned char

U1

Byte

short

Short

short

short

I2

Int16

ushort

UInt16

UInt16

unsigned short

U2

UInt16

int

Integer

int

int

I4

Int32

uint

NA

NA

unsigned int

U4

UInt32

long

Long

long

__int64

I8

Int64

ulong

UInt64

UInt64

Unsigned __int64

U8

UInt64

float

Single

float

float

R4

Single

double

Double

double

double

R8

Double

bool

Boolean

boolean

bool

I4

Boolean

char

Char

char

wchar_t

U2

Char

string

String

String

String

System.String

String

object

Object

Object

Object

System.Object

Object



一個(gè)支持從流中讀取多種數(shù)據(jù)類型的類可以有下列方法。

double ReadDouble();

float ReadSingle();

long ReadIn64();

int ReadInt32();

short ReadInt16();



上面的例子在下述對(duì)語(yǔ)言有專門要求的情況下是首選。

double ReadDouble();

float ReadFloat();

long ReadLong();

int ReadInt();

short ReadShort();