更新 : 2007 年 11 月
一般に、型名は名詞句にする必要があります。使用する名詞は、その型によって表されるエンティティです。たとえば、Button、Stack、File には、それぞれその型によって表されるエンティティを識別する名前があります。開発者の観点から、エンティティを識別する名前を選択します。名前は、使用シナリオを反映する必要があります。
型名を選択する際に適用されるガイドラインを次に示します。
Pascal 形式を使用して、名詞、名詞句、または場合によっては形容詞句で、クラス、インターフェイス、および値型に名前を付けます。
クラス名には、プリフィックス (C など) を使用しないでください。
I で始まる必要のあるインターフェイスは、この規則の例外です。
派生クラスの名前は、末尾に基本クラスの名前を付けるよう考慮します。
たとえば、Stream から継承した .NET Framework の型は名前の末尾を Stream にし、Exception から継承した型は Exception にします。
インターフェイス名には、その型がインターフェイスであることを示すために、プリフィックス I を付けます。
クラス/インターフェイスのペアを定義するときに、そのクラスがインターフェイスの標準実装である場合、名前はインターフェイス名のプリフィックス I の部分だけが異なるようにします。
たとえば、.NET Framework には、IAsyncResult インターフェイスと AsyncResult クラスが用意されています。
ジェネリック型パラメータの名前
ジェネリックは、.NET Framework Version 2.0 の主要な新機能です。ジェネリック型パラメータの適切な名前の選択方法に関するガイドラインを次に示します。
1 文字の名前がそのパラメータ自体を完全に説明するものであり、説明的な名前によって付加価値を付けない場合を除き、ジェネリック型パラメータには説明的な名前を付けます。
IDictionary<TKey, TValue> は、このガイドラインに従ったインターフェイスの一例です。
1 文字の型パラメータを 1 つ持つ型の型パラメータ名として、T を使用するよう考慮します。
説明的な型パラメータ名には、プリフィックス T を付けます。
パラメータの名前で型パラメータの制約を示すよう考慮します。たとえば、ISession に制約されたパラメータに TSession という名前を付けます。
一般的な型の名前
次のガイドラインでは、開発者が特定のクラスについて意図された使用シナリオを認識するうえで役立つ、名前付け規則について説明します。このガイドラインで、他の型から継承した型について述べている場合、これは直接継承した型だけでなく、すべての継承側に適用されます。たとえば、ガイドラインに「Exception から継承した型には、サフィックス Exception を追加します。」と記載されている場合、継承階層内に Exception が含まれるすべての型が、末尾に Exception の付いた名前を持つ必要があるということです。
これらの各ガイドラインは、指定したサフィックスを予約する場合にも役立ちます。型がガイドラインで設定された基準を満たしていない場合、その型ではサフィックスを使用しないでください。たとえば、型が Exception から直接または間接的に継承していない場合、名前の末尾に Exception を付けることはできません。
カスタム属性クラスには、サフィックス Attribute を追加します。
ObsoleteAttribute と AttributeUsageAttribute は、このガイドラインに従った型名です。
イベントで使用する型 (C# のイベントの戻り値の型など) の名前には、サフィックス EventHandler を追加します。
AssemblyLoadEventHandler は、このガイドラインに従ったデリゲート名です。
イベント ハンドラではないデリゲートの名前には、サフィックス Callback を追加します。
サフィックス Delegate は、デリゲートに追加しないでください。
System.EventArgs を拡張するクラスには、サフィックス EventArgs を追加します。
System.Enum クラスから派生しないでください。代わりに、使用している言語でサポートされているキーワードを使用します。たとえば、C# の場合、Enum キーワードを使用します。
System.Exception から継承した型には、サフィックス Exception を追加します。
System.Collections.IDictionary または System.Collections.Generic.IDictionary<TKey, TValue> を実装する型には、サフィックス Dictionary を追加します。System.Collections.IDictionary はコレクションの特定の型ですが、このガイドラインは下記の一般的なコレクションのガイドラインより優先されます。
System.Collections.IEnumerable、System.Collections.ICollection、System.Collections.IList、System.Collections.Generic.IEnumerable<T>、System.Collections.Generic.ICollection<T>、または System.Collections.Generic.IList<T> を実装する型には、サフィックス Collection を追加します。
System.IO.Stream から継承した型には、サフィックス Stream を追加します。
System.Security.CodeAccessPermission から継承した型、または System.Security.IPermission を実装する型には、サフィックス Permission を追加します。
列挙値の名前
列挙値名にプリフィックスを使用しないでください。たとえば、ADO 列挙値にプリフィックス ad を使用したり、リッチ テキスト列挙値にプリフィックス rtf を使用したりしないでください。
これは、列挙値名に列挙型名を含めることはできないことも意味します。列挙値に不正な名前を付けたコード例を次に示します。
Public Enum Teams
TeamsAlpha
TeamsBeta
TeamsDelta
End Enum
public enum Teams
{
TeamsAlpha,
TeamsBeta,
TeamsDelta
}
列挙型にサフィックスとして Enum を使用しないでください。
flags 列挙体の名前にサフィックスとして Flags を追加しないでください。
列挙体の値がビット フィールドでない場合は、列挙体には単数形の名前を使用します。
値としてビット フィールドを持つ列挙体 (flags 列挙体とも呼ばれます) には、複数形の名前を使用します。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
デザイン ガイドラインの詳細については、2005 年に Addison-Wesley から出版されている Krzysztof Cwalina、Brad Abrams 共著の『Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries』を参照してください。