C# Programming

ImageC# ネーミングガイドライン

開発環境: Visual Studio 2003

目次

目的

MFC, Win32 の超気もちわりぃコーディングコンベンションを使わないですむだけでうれしくなってしまう。
C# Naming Guidelines が出ているのでまとめておきます。

参考URL

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconnamingguidelines.asp

ネーミング形式

次のようなネーミング形式が出てきます。

Pascal 形式
(Pascal case)
説明
MyClass各単語の最初の文字を大文字にする。
3 文字以上から構成される識別子に対して適用する。
Camel 形式
(Camel case)
説明
myParameter最初の単語は小文字。それに続く各単語の最初の文字を大文字にする。
Camelback Coding Convention ( xxxXxxxXxxx ← らくだのこぶ?)
大文字形式
(Uppercase)
説明
System.IO識別子のすべての文字を大文字にする。
2文字以下で構成される識別子にだけ使用する。

大文字と小文字を区別した書き方をしない。

class MyClass
class MYCLASS

MyMethod(string str, string Str)

System.Windows.Forms.Point p
System.Windows.Forms.POINT p

などの大文字と小文字を区別した書き方をしない。

省略形は極力使用しない。

Ptr →Pointer
WndProc → WindowProcedure
CurSel → CurrentSelection

ハンガリー記法は使用しない。

非常に暗号性の高いハンガリー記法は使用しない。ばんざ〜〜〜い!
くされハンガリー記法よ、さようなら!

型名を扱う際の注意

プログラミング言語に依存した型名を名前に使わない。
たとえば、C# の int は、VB では Integerなので、次のように引数にプログラミング言語に依存したパラメータ名を使用しない。

void Write(int intValue); →void Write(int value);

たまに、このような型名を必要とする場合が出てくるが、その場合は言語に依存した名前ではなく、汎用型名(Universal type name)を使用する。

例  int ReadInt(); →int ReadInt32();

名前空間のネーミング方法

CompanyName.TechnologyName[.Feature][.Design] というパターン。

例: Uchukamen.MultiMedia.Movie.Viewer

.NET Framework 名前空間で使用されている名前は使わない。
Class Console →だめ。

意味的に適切な場合は、複数形の名前空間名を使用する。
例: Collections
例外: 省略形 System.IOs 誤 → System.IO 正。

名前空間とクラスに同じ名前を使用しない。

namespace MySystem;

class MySystem; // 誤り。名前空間とクラスに同じ名前を使用しない。
....

クラスのネーミング方法

Pascal 形式。 例 MyClass

クラスを表す C などの型プリフィックスは使用しない。CMyClass → MyClass

インターフェースのネーミング方法

プリフィックス I を付ける。例 IClassFactory

名詞または名詞句、あるいは動作を説明する形容詞

アンダースコアは使用しない。

アトリビュートクラスのネーミング方法

必ずサフィックス Attribute を追加する。

列挙型のネーミング方法

Pascal 形式。 例 

Enum サフィックスを付けない。

単数形の名前を使用する。ビット フィールドは複数形の名前を使用する。

Enum 型のビット フィールドには常に FlagsAttribute を追加する。

静的フィールド (Static Field)のネーミング方法

Pascal 形式。 例 static SzText

名詞または名詞句、あるいは名詞の省略形を使用する。

静的フィールド名には、ハンガリー表記法を使用したプリフィックスをつける。

可能な限りスタティックフィールドではなく、スタティックプロパティを使用する。

パラメータのネーミング方法

Camel 形式。 例 string Format(string shortFormat, int decmalValue);

その名前と型を見ただけで、意味を判断できるくらいわかりやすい名前にする。

パラメータの型を説明する名前ではなく、パラメータの意味を説明する名前を使用する。

Visual Studio.NET では、パラメータの型の情報が表示されるので、そのパラメータの意味を説明した方がよい。

ハンガリー表記法は使用しない。

メソッドのネーミング方法

Pascal 形式。 例 GetValue()

動詞または動詞句を使う。

プロパティのネーミング方法

Pascal 形式。 例 MyProperty

名詞または名詞句を使う。

基になる型と同じ名前でプロパティを作成する。

ハンガリー表記法は使用しない。

イベントのネーミング方法

イベントハンドラ名にはEventHandler サフィックスを付ける。

sender および e という名前の 2 つのパラメータを指定する。

イベント引数クラスの名前には、EventArgs サフィックスを付ける。

イベントの名前には、動詞を使用する。

イベント発生前の概念を表すイベント名を作成するときは、動名詞 (動詞の "ing" 形) を使用する。 例 Closing
イベント発生後の概念を表すイベント名を作成するときは、動詞の過去形を使用する。 例 Closed

イベントの宣言にはプリフィックスやサフィックスを使用しない。例: OnClose → Close を使用する。

一般に、派生クラスでは、OnXxx という名前のプロテクト メソッドを用意する。
このメソッドには、常に sender がその型のインスタンスになるため、イベント パラメータe だけを渡す。