Freigeben über


Entwurf indizierter Eigenschaften

Aktualisiert: November 2007

Indizierte Eigenschaften ermöglichen einen arrayähnlichen Zugriff auf Gruppen von Elementen (z. B. die Zeichen in einer Zeichenfolge oder die Bits in einem BitArray). Die auch als Indexer oder Standardeigenschaften bezeichneten indizierten Eigenschaften unterscheiden sich von regulären Eigenschaften darin, dass sie Parameter akzeptieren, die angeben, auf welches Element in der Gruppe zugegriffen werden soll. Die Implementierung einer Indexeigenschaft sollte so einfach wie möglich sein, weil Indexer häufig in Schleifen verwendet werden. Anhand der folgenden Richtlinien können Sie sicherstellen, dass Typen ggf. gut entworfene Indizes enthalten.

Verwenden Sie keine indizierten Eigenschaften mit mehreren Parametern.

Wenn ein Indexer mehrere Parameter erfordert, überprüfen Sie, ob die Eigenschaft tatsächlich den Zugriff auf eine logische Auflistung darstellt. Wenn dies nicht der Fall ist, verwenden Sie stattdessen Methoden, und wählen Sie einen Methodennamen, der mit Get oder Set beginnt.

Verwenden Sie keine Indexer mit anderen Parametertypen als System.Int32, System.Int64, System.String, System.Object, Enumerationen oder generische Typparameter.

Wenn der Entwurf andere Parametertypen erfordert, überprüfen Sie genau, ob der Member tatsächlich den Zugriff auf eine logische Auflistung darstellt. Wenn dies nicht der Fall ist, verwenden Sie stattdessen Methoden, und wählen Sie einen Methodennamen, der mit Get oder Set beginnt.

Verwenden Sie für indizierte Eigenschaften den Namen Item, sofern sich kein offensichtlich besser geeigneter Name anbietet (ein Beispiel finden Sie in der System.String.Chars(System.Int32)-Eigenschaft).

Mit dem IndexerNameAttribute-Attribut kann der Name eines Indexers angepasst werden.

Stellen Sie nicht sowohl einen Indexer als auch Methoden bereit, die semantisch gleich sind.

Im folgenden Codebeispiel sollte der Indexer in eine Methode geändert werden.

<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)

Stellen Sie in einem Typ höchstens eine Gruppe überladener Indexer bereit.

Einige Compiler, z. B. der C#-Compiler, erzwingen diese Richtlinie.

Von einigen Sprachen werden mehrere Gruppen von Indexern nicht unterstützt. Wenn Sie sie verwenden, können einige Entwickler nicht auf diese Member zugreifen.

Verwenden Sie nur standardmäßige indizierte Eigenschaften.

Einige Compiler, z. B. der C#-Compiler, erzwingen diese Richtlinie. Nicht standardmäßige indizierte Eigenschaften werden nicht in allen Programmiersprachen unterstützt. Wenn Sie sie verwenden, können einige Entwickler nicht auf diese Member zugreifen.

Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.

Weitere Informationen zu Entwurfsrichtlinien finden Sie im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.

Siehe auch

Konzepte

Eigenschaftenentwurf

Weitere Ressourcen

Entwurfsrichtlinien für Member

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken