更新 : 2007 年 11 月
インデックス付きプロパティを使用すると、文字列内の文字や BitArray 内のビットなどの項目のグループに配列のようにアクセスできます。インデックス付きプロパティは、インデクサまたは既定のプロパティと呼ばれ、標準のプロパティとは違って、アクセス先のグループ内の要素を示すパラメータを受け取ります。インデックス付きプロパティは、ループで使用されることが多いため、その実装はできるだけ簡単にする必要があります。以下のガイドラインに従うと、適切にデザインされたインデックスを適宜、型に含めることができます。
複数のパラメータを持つインデックス付きプロパティは避けてください。
インデクサで複数のパラメータが必要な場合は、プロパティが論理コレクションへのアクセスを実際に表すかどうかを再評価します。アクセスを表さない場合は、代わりにメソッドを使用し、Get または Set で始まるメソッド名を選択するようにしてください。
System.Int32、System.Int64、System.String、System.Object、列挙型、またはジェネリック型パラメータ以外のパラメータ型を持つインデクサは避けてください。
デザインで他の型のパラメータが必要な場合は、メンバが論理コレクションへのアクセスを実際に表すかどうかを厳密に再評価する必要があります。アクセスを表さない場合は、代わりにメソッドを使用し、Get または Set で始まるメソッド名を選択するようにしてください。
インデックス付きプロパティには、名前として Item を使用してください。ただし、明らかにより適切な名前がある場合を除きます (たとえば、System.String.Chars(System.Int32) プロパティを参照)。
IndexerNameAttribute 属性を使用すると、インデクサの名前をカスタマイズできます。
セマンティクスが同等のインデクサとメソッドの両方を提供しないでください。
次のコード例では、インデクサをメソッドに変更する必要があります。
<System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")> _
Public Property Item (skillId as Integer) as JobInfoCollection
...
Public Function GetPositions(skillId as Integer, _
minJobLevel as Integer) _
as JobInfoCollection
[System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")]
public JobInfoCollection this [int skillId]
...
public JobInfoCollection GetPositions(int skillId, int minJobLevel)
オーバーロードされたインデクサの複数のファミリを 1 つの型に提供しないでください。
C# コンパイラなど、一部のコンパイラには、このガイドラインが適用されます。
インデクサの複数のセットは、一部の言語ではサポートされません。使用した場合、開発者によってはこれらのメンバにアクセスできなくなることがあります。
既定以外のインデックス付きプロパティは使用しないでください。
C# コンパイラなど、一部のコンパイラには、このガイドラインが適用されます。既定以外のインデックス付きプロパティは、すべてのプログラミング言語でサポートされるわけではありません。使用した場合、開発者によってはこれらのメンバにアクセスできなくなることがあります。
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』を参照してください。