Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C-sharp language specification.2004.pdf
Скачиваний:
12
Добавлен:
23.08.2013
Размер:
2.55 Mб
Скачать

C# LANGUAGE SPECIFICATION

Type

Case

Notes

 

 

 

Class

PascalCase

 

 

 

 

Class, attribute

PascalCase

Has a suffix of Attribute

 

 

 

Class, exception

PascalCase

Has a suffix of Exception

 

 

 

Constant

PascalCase

 

 

 

 

Enum type

PascalCase

 

 

 

 

Enum value

PascalCase

 

 

 

 

Event

PascalCase

 

 

 

 

Field, non-public instance

camelCase

 

 

 

 

Field, public instance

PascalCase

Rarely used (use a property instead)

 

 

 

Interface

PascalCase

Has a prefix of I

 

 

 

Local variable

camelCase

 

 

 

 

Method

PascalCase

 

 

 

 

Namespace

PascalCase

 

 

 

 

Parameter

camelCase

 

 

 

 

Property

PascalCase

 

 

 

 

1

2C.2 Word choice

3Do avoid using class names duplicated in heavily used namespaces. For example, don’t use the

4following for a class name.

5

System

Collections

Forms

UI

6Do not use abbreviations in identifiers.

7If you must use abbreviations, do use camelCase for any abbreviation containing more than two

8characters, even if this is not the usual abbreviation.

9C.3 Namespaces

10The general rule for namespace naming is CompanyName.TechnologyName.

11Do avoid the possibility of two published namespaces having the same name, by prefixing namespace

12names with a company name or other well-established brand. For example, Microsoft.Office for the

13Office Automation classes provided by Microsoft.

14Do use PascalCase, and separate logical components with periods (as in

15Microsoft.Office.PowerPoint). If your brand employs non-traditional casing, do follow the

16casing defined by your brand, even if it deviates from normal namespace casing (for example,

17NeXT.WebObjects, and ee.cummings).

18Do use plural namespace names where appropriate. For example, use System.Collections rather

19than System.Collection. Exceptions to this rule are brand names and abbreviations. For example,

20use System.IO not System.IOs.

21Do not have namespaces and classes with the same name.

22C.4 Classes

23Do name classes with nouns or noun phrases.

464

Annex C Naming guidelines

1Do use PascalCase.

2Do use sparingly, abbreviations in class names.

3Do not use any prefix (such as “C”, for example). Where possible, avoid starting with the letter “I”,

4since that is the recommended prefix for interface names. If you must start with that letter, make sure the

5second character is lowercase, as in IdentityStore.

6Do not use any underscores.

7public class FileStream { … }

8public class Button { … }

9public class String { … }

10C.5 Interfaces

11Do name interfaces with nouns or noun phrases, or adjectives describing behavior. For example,

12IComponent (descriptive noun), ICustomAttributeProvider (noun phrase), and IPersistable

13(adjective).

14Do use PascalCase.

15Do use sparingly, abbreviations in interface names.

16Do not use any underscores.

17Do prefix interface names with the letter “I”, to indicate that the type is an interface.

18Do use similar names when defining a class/interface pair where the class is a standard implementation

19of the interface. The names should differ only by the “I” prefix in the interface name. This approach is

20used for the interface IComponent and its standard implementation, Component.

21public interface IComponent { … }

22public class Component : IComponent { … }

23public interface IServiceProvider{ … }

24public interface IFormatable { … }

25C.6 Enums

26Do use PascalCase for enums.

27Do use PascalCase for enum value names.

28Do use sparingly, abbreviations in enum names.

29Do not use a family-name prefix on enum.

30Do not use any “Enum” suffix on enum types.

31Do use a singular name for enums.

32Do use a plural name for bit fields.

33Do define enumerated values using an enum if they are used in a parameter or property. This gives

34development tools a chance at knowing the possible values for a property or parameter.

35public enum FileMode

36{

37

Create,

38

CreateNew,

39

Open,

40

OpenOrCreate,

41Truncate

42}

43Do use the Flags custom attribute if the numeric values are meant to be bitwise ORed together.

465

C# LANGUAGE SPECIFICATION

1[Flags]

2public enum Bindings

3{

4

CreateInstance,

5

DefaultBinding,

6

ExcatBinding,

7

GetField,

8

GetProperty,

9

IgnoreCase,

10

InvokeMethod,

11

NonPublic,

12

OABinding,

13

SetField,

14

SetProperty,

15Static

16}

17Do use int as the underlying type of an enum. (An exception to this rule is if the enum represents flags

18and there are more than 32 flags, or the enum might grow to that many flags in the future, or the type

19needs to be different from int for backward compatibility.)

20Do use enums only if the value can be completely expressed as a set of bit flags. Do not use enums for

21open sets (such as operating system version).

22C.7 Static fields

23Do name static members with nouns, noun phrases, or abbreviations for nouns.

24Do name static members using PascalCase.

25Do not use Hungarian-type prefixes on static member names.

26C.8 Parameters

27Do use descriptive names such that a parameter’s name and type clearly imply its meaning.

28Do name parameters using camelCase.

29Do prefer names based on a parameter’s meaning, to names based on the parameter’s type. It is likely

30that development tools will provide the information about type in a convenient way, so the parameter

31name can be put to better use describing semantics rather than type.

32Do not reserve parameters for future use. If more data is need in the next version, a new overload can be

33added.

34Do not use Hungarian-type prefixes.

35Type GetType(string typeName)

36string Format(string format, object[] args)

37C.9 Methods

38Do name methods with verbs or verb phrases.

39Do name methods with PascalCase.

40 RemoveAll() GetCharArray() Invoke()

41C.10 Properties

42Do name properties using noun or noun phrases.

43Do name properties with PascalCase.

44Consider having a property with the same as a type. When declaring a property with the same name as a

45type, also make the type of the property be that type. In other words, the following is okay

466

Annex C Naming guidelines

1public enum Color { … }

2public class Control

3{

4public Color Color { get { … } set { … } }

5}

6but this is not

7public enum Color { … }

8public class Control

9{

10public int Color { get { … } set { … } }

11}

12In the latter case, it will not be possible to refer to the members of the Color enum because Color.Xxx

13will be interpreted as being a member access that first gets the value of the Color property (of type

14int) and then accesses a member of that value (which would have to be an instance member of

15System.Int32).

16C.11 Events

17Do name event handlers with the EventHandler suffix.

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

19Do use two parameters named sender and e. The sender parameter represents the object that raised the

20event, and this parameter is always of type object, even if it is possible to employ a more specific type.

21The state associated with the event is encapsulated in an instance e of an event class. Use an appropriate

22and specific event class for its type.

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

24Do name event argument classes with the EventArgs suffix.

25public class MouseEventArgs : EventArgs

26{

27

int x;

28

int y;

29

public MouseEventArgs(int x, int y) {

30

this.x = x;

31

this.y = y;

32

}

33

public int X { get { return x; } }

34public int Y { get { return y; } }

35}

36Do name event names that have a concept of preand post-operation using the present and past tense (do

37not use BeforeXxx/AfterXxx pattern). For example, a close event that could be canceled would have a

38Closing and Closed event.

39public event ControlEventHandler ControlAdded;

40Consider naming events with a verb.

41C.12 Case sensitivity

42Don’t use names that require case sensitivity. Components might need to be usable from both case-

43sensitive and case-insensitive languages. Since case-insensitive languages cannot distinguish between

44two names within the same context that differ only by case, components must avoid this situation.

45Examples of what not to do:

46Don’t have two namespaces whose names differ only by case.

47namespace ee.cummings;

48namespace Ee.Cummings;

467

Соседние файлы в предмете Электротехника