Teilen über


Namen von Klassen, Strukturen und Schnittstellen

Hinweis

Diese Inhalte wurden mit Genehmigung von Pearson Education, Inc. aus Framework Design Guidelines nachgedruckt: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Diese Ausgabe wurde 2008 veröffentlicht, und das Buch wurde seitdem in der dritten Ausgabe vollständig überarbeitet. Einige der Informationen auf dieser Seite sind möglicherweise veraltet.

Die folgenden Benennungsrichtlinien gelten für allgemeine Typnamen.

✔️ Verwenden Sie für die Benennung von Klassen und Strukturen mithilfe von PascalCasing Nomen oder Nominalphrasen.

Dadurch werden Typnamen von Methoden unterschieden, deren Benennung auf Verbalphrasen basiert.

✔️ Verwenden Sie für die Benennung von Schnittstellen Adjektive oder auch Nomen bzw. Nominalphrasen.

Nomen und Nominalphrasen sollten jedoch sparsam verwendet werden, da sie ein Hinweis auf eine abstrakte Klasse und nicht auf eine Schnittstelle sein können.

❌ Verwenden Sie für Klassennamen keine Präfixe (z. B. „C“).

✔️ Ziehen Sie für das Namensende von abgeleiteten Klassen den Namen der Basisklasse in Betracht.

Dadurch wird die Lesbarkeit erhöht und die Beziehung deutlich gemacht. In den folgenden Codebeispielen gehört ArgumentOutOfRangeException zur Basisklasse Exception und SerializableAttribute zu Attribute. Wenden Sie diese Richtlinie jedoch mit Bedacht an: So gehört die Klasse Button zwar dem Ereignis Control an, doch ist Control im Namen nicht enthalten.

✔️ Verwenden Sie für Schnittstellennamen das Präfix „I“, um den Typ als Schnittstelle anzugeben.

So sind z. B. IComponent (Nomen), ICustomAttributeProvider (Nominalphrase) und IPersistable (Adjektiv) geeignete Namen für Schnittstellen. Vermeiden Sie wie bei anderen Typnamen Abkürzungen.

✔️ Verwenden Sie zur Definition eines Klasse-/Schnittstellenpaars Namen, die sich nur im Präfix „I“ des Schnittstellennamens unterscheiden, wenn die Klasse eine Standardimplementierung der Schnittstelle ist.

Namen generischer Typparameter

In .NET Framework 2.0 wurden Generics hinzugefügt. Mit dem Feature wurde eine neue Art von Bezeichner namens Typparameter eingeführt.

✔️ Verwenden Sie zur Benennung von generischen Typparametern beschreibende Namen, es sei denn, ein einzelner Buchstaben reicht als Erklärung aus, und ein beschreibender Name würde keinen echten Mehrwert bieten.

✔️ Ziehen Sie die Verwendung von T als Typparametername für Typen in Betracht, die einen einzelnen Buchstaben als Typparameter aufweisen.

public int IComparer<T> { ... }
public delegate bool Predicate<T>(T item);
public struct Nullable<T> where T:struct { ... }

✔️ Verwenden Sie das Präfix T für beschreibende Typparameternamen.

public interface ISessionChannel<TSession> where TSession : ISession {
    TSession Session { get; }
}

✔️ Ziehen Sie die Angabe von Einschränkungen im Namen des Parameters in Betracht, die für einen Typparameter gelten.

So können Sie einen auf ISession eingeschränkten Parameter z. B. TSession nennen.

Namen allgemeiner Typen

✔️ Wenden Sie die in der folgenden Tabelle beschriebenen Richtlinien an, wenn Sie Typen benennen, die von bestimmten .NET Framework-Typen abgeleitet sind oder diese implementieren.

Basistyp Richtlinie für abgeleitete/Implementierungsypen
System.Attribute ✔️ Fügen Sie den Namen benutzerdefinierter Attributklassen das Suffix „Attribute“ hinzu.
System.Delegate ✔️ Fügen Sie den Namen von Delegaten, die in Ereignissen verwendet werden, das Suffix „EventHandler“ hinzu.

✔️ Fügen Sie den Namen von Delegaten, die nicht als Ereignishandler verwendet werden, das Suffix „Callback“ hinzu.

❌ Fügen Sie Delegaten nicht das Suffix „Delegate“ hinzu.
System.EventArgs ✔️ Fügen Sie das Suffix „EventArgs“ hinzu.
System.Enum ❌ Leiten Sie nicht von dieser Klasse ab. Verwenden Sie stattdessen das von Ihrer Sprache unterstützte Schlüsselwort, z. B. enum in C#.

❌ Fügen Sie nicht die Suffixe „Enum“ oder „Flag“ hinzu.
System.Exception ✔️ Fügen Sie das Suffix „Exception“ hinzu.
IDictionary
IDictionary<TKey,TValue>
✔️ Fügen Sie das Suffix „Dictionary“ hinzu. Beachten Sie, dass es sich bei IDictionary um einen bestimmten Auflistungstyp handelt. Diese Richtlinie hat jedoch Vorrang vor der folgenden allgemeineren Richtlinie für Auflistungen.
IEnumerable
ICollection
IList
IEnumerable<T>
ICollection<T>
IList<T>
✔️ Fügen Sie das Suffix „Collection“ hinzu.
System.IO.Stream ✔️ Fügen Sie das Suffix „Stream“ hinzu.
CodeAccessPermission IPermission ✔️ Fügen Sie das Suffix „Permission“ hinzu.

Benennen von Enumerationen

Die Namen von Enumerationstypen sollten den allgemeinen Standardregeln für die Benennung von Typen (z. B. PascalCasing) entsprechen. Es gibt jedoch zusätzliche Richtlinien, die speziell für Enumerationen gelten.

✔️ Verwenden Sie für eine Enumeration einen Typnamen im Singular, es sei denn, bei deren Werten handelt es sich um Bitfelder.

✔️ Verwenden Sie für eine Enumeration, deren Werte Bitfelder darstellen (auch Flags-Enumeration genannt), einen Typnamen im Plural.

❌ Verwenden Sie in Enumerationstypnamen nicht das Suffix „Enum“.

❌ Verwenden Sie in Enumerationstypnamen nicht die Suffixe „Flag“ oder „Flags“.

❌ Verwenden Sie für Enumerationswertnamen keine Suffixe (z. B. „ad“ für ADO-Enumerationen oder „rtf“ für Rich-Text-Enumerationen).

Teile ©2005, 2009 Microsoft Corporation. Alle Rechte vorbehalten.

Nachdruck mit Genehmigung von Pearson Education, Inc aus Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition von Krzysztof Cwalina und Brad Abrams, veröffentlicht am 22. Oktober 2008 durch Addison-Wesley Professional als Teil der Microsoft Windows Development Series.

Weitere Informationen