Namen von Klassen, Strukturen und Schnittstellen
Aktualisiert: November 2007
Im Allgemeinen sollten Typnamen substantivische Ausdrücke sein, wobei das Substantiv die vom Typ dargestellte Entität ist. Beispielsweise bezeichnen die Namen Button, Stack und File jeweils die vom Typ dargestellte Entität. Wählen Sie Namen, die die Entität aus der Perspektive des Entwicklers bezeichnen. Namen sollten Verwendungsszenarien widerspiegeln.
Für die Auswahl von Typnamen gelten die folgenden Richtlinien.
Verwenden Sie für die Namen von Klassen, Schnittstellen und Werttypen Substantive, substantivische Ausdrücke oder gelegentlich adjektivische Ausdrücke unter Verwendung der Pascal-Schreibweise.
Verwenden Sie für Klassennamen kein Präfix (z. B. den Buchstaben C).
Die Ausnahme zu dieser Regel sind Schnittstellen, die mit dem Buchstaben I beginnen sollten.
Es empfiehlt sich, den Namen einer abgeleiteten Klasse mit dem Namen der Basisklasse abzuschließen.
Beispielsweise enden Framework-Typen, die von Stream erben, mit Stream, und Typen, die von Exception erben, enden mit Exception.
Stellen Sie Schnittstellennamen als Präfix den Buchstaben I voran, um anzugeben, dass es sich um eine Schnittstelle (Interface) handelt.
Wenn Sie ein Klassen-Schnittstellen-Paar definieren, in dem die Klasse eine Standardimplementierung der Schnittstelle ist, dürfen sich die Namen nur durch das Präfix I im Schnittstellennamen unterscheiden.
Beispielsweise stellt Framework die IAsyncResult-Schnittstelle und die AsyncResult-Klasse bereit.
Namen von generischen Typparametern
Generika sind ein wichtiges neues Feature von .NET Framework, Version 2.0. Zum Festlegen der richtigen Namen für generische Typparameter gelten die folgenden Richtlinien.
Verwenden Sie für generische Typparameter beschreibende Namen, es sei denn, ein Name aus einem einzigen Buchstaben ist vollkommen selbsterklärend, und ein beschreibender Name ist ohne zusätzlichen Wert.
IDictionary<TKey, TValue> ist ein Beispiel für eine Schnittstelle, die dieser Richtlinie entspricht.
Es empfiehlt sich, für Typen mit einem Typparameter aus einem einzigen Buchstaben den Buchstaben T als Typparametername zu verwenden.
Verwenden Sie den Buchstaben T als Präfix für beschreibende Typparameternamen.
Geben Sie Einschränkungen für einen Typparameter im Namen des Parameters an. Beispielsweise kann ein auf ISession eingeschränkter Parameter als TSession bezeichnet werden.
Namen allgemeiner Typen
Die folgenden Richtlinien stellen Benennungskonventionen dar, die Entwicklern das Erkennen des vorgesehenen Verwendungsszenarios für bestimmte Klassen erleichtern. Wenn sich die Richtlinie auf Typen bezieht, die von einem anderen Typ erben, gilt die Richtlinie für alle Erben und nicht nur für die direkt erbenden Typen. Beispielsweise bedeutet die Richtlinie "Fügen Sie Typen, die von Exception erben, das Suffix Exception hinzu", dass der Name jedes Typs, dessen Vererbungshierarchie Exception enthält, mit Exception enden sollte.
Mit diesen Richtlinien wird außerdem das angegebene Suffix reserviert. Verwenden Sie das Suffix nur, wenn der Typ den in der Richtlinie beschriebenen Kriterien entspricht. Wenn der Typ beispielsweise nicht direkt oder indirekt von Exception erbt, darf sein Name nicht mit Exception enden.
Fügen Sie benutzerdefinierten Attributklassen das Suffix Attribute hinzu.
ObsoleteAttribute und AttributeUsageAttribute sind Typnamen, die dieser Richtlinie entsprechen.
Fügen Sie Namen von Typen, die in Ereignissen verwendet werden (z. B. Rückgabetypen eines C#-Ereignisses), das Suffix EventHandler hinzu.
AssemblyLoadEventHandler ist ein Delegatname, der dieser Richtlinie entspricht.
Fügen Sie dem Namen eines Delegaten, der kein Ereignishandler ist, das Suffix Callback hinzu.
Fügen Sie einem Delegaten nicht das Suffix Delegate hinzu.
Fügen Sie Klassen, die System.EventArgs erweitern, das Suffix EventArgs hinzu.
Erstellen Sie keine Ableitungen von der System.Enum-Klasse. Verwenden Sie stattdessen das von der entsprechenden Sprache unterstützte Schlüsselwort. Verwenden Sie z. B. in C# das enum-Schlüsselwort.
Fügen Sie Typen, die von System.Exception erben, das Suffix Exception hinzu.
Fügen Sie Typen, die System.Collections.IDictionary oder System.Collections.Generic.IDictionary<TKey, TValue> implementieren, das Suffix Dictionary hinzu. Beachten Sie, dass System.Collections.IDictionary ein spezieller Auflistungstyp ist, doch diese Richtlinie hat Vorrang vor der folgenden allgemeineren Richtlinie für Auflistungen.
Fügen Sie Typen, die System.Collections.IEnumerable, System.Collections.ICollection, System.Collections.IList, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.ICollection<T> oder System.Collections.Generic.IList<T> implementieren, das Suffix Collection hinzu.
Fügen Sie Typen, die von System.IO.Stream erben, das Suffix Stream hinzu.
Fügen Sie Typen, die von System.Security.CodeAccessPermission oder System.Security.IPermission erben, das Suffix Permission hinzu.
Namen von Enumerationen
Verwenden Sie kein Präfix für die Namen von Enumerationswerten. Verwenden Sie z. B. nicht das Präfix ad für ADO-Enumerationen oder das Präfix rtf für RTF-Enumerationen usw.
Dies bedeutet auch, dass die Namen von Enumerationswerten nicht den Namen des Enumerationstyps enthalten dürfen. Im folgenden Codebeispiel wird die falsche Benennung der Werte einer Enumeration veranschaulicht.
Public Enum Teams
TeamsAlpha
TeamsBeta
TeamsDelta
End Enum
public enum Teams
{
TeamsAlpha,
TeamsBeta,
TeamsDelta
}
Verwenden Sie für Enumerationstypen nicht das Suffix Enum.
Fügen Sie den Namen von Flags-Enumerationen nicht Flags als Suffix hinzu.
Verwenden Sie für Enumerationen Namen im Singular, sofern ihre Werte keine Bitfelder sind.
Verwenden Sie einen Namen im Plural für Enumerationen, deren Werte Bitfelder sind. Diese Enumerationen werden auch als Flags-Enumerationen bezeichnet.
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.