
Es gibt zwar keinen richtigen Weg, Ihren C#-Code zu formatieren, aber die Einigung auf einen einheitlichen Stil in Ihrem Team kann zu einer saubereren, lesbareren und skalierbareren Codebasis führen. Eine gut organisierte Stilanleitung kann Ihnen helfen, Diskrepanzen einzudämmen, um ein zusammenhängendes Endprodukt zu erstellen.
Die Namen Ihrer Variablen, Klassen und Methoden sind keine bloßen Bezeichnungen. Sie tragen Gewicht und Bedeutung. Ein guter Namensstil beeinflusst, wie jemand, der Ihr Programm liest, die Idee, die Sie vermitteln möchten, verstehen kann.
Auf dieser Seite finden Sie Tipps und wichtige Überlegungen, die Sie bei der Erstellung Ihrer eigenen Stilanleitung für Namenskonventionen und Codeformatierungen beachten sollten.
Hinweis: Die hier vorgestellten Empfehlungen basieren auf den Empfehlungen von Microsoft. Die besten Code-Style-Guide-Regeln sind diejenigen, die für die Anforderungen Ihres Teams am besten geeignet sind.
Ein Beispiel für eine Code-Stilanleitung finden Sie hier oder Sie laden das vollständige E-Book „Use a C# style guide for clean and scalable game code (Unity 6-Edition)“ herunter.
Eine Kennung ist jeder Name, den Sie einem Typ (Klasse, Schnittstelle, Struktur, Delegat oder Enum), Mitglied, Variable oder Namensraum zuweisen.
Vermeiden Sie Sonderzeichen (Backslashes, Symbole, Unicode-Zeichen) in Ihren Kennungen, obwohl C# dies zulässt. Diese können bestimmte Unity Befehlszeilentools stören. Vermeiden Sie ungewöhnliche Charaktere, um die Kompatibilität mit den meisten Plattformen zu gewährleisten.
Sie können keine Variablen mit Leerzeichen im Namen definieren, da C# das Leerzeichen verwendet, um Kennungen zu trennen. Großbuchstabensysteme können das Problem lindern, zusammengesetzte Namen oder Sätze im Quellcode verwenden zu müssen.
Nachfolgend sind einige bekannte Namenskonventionen aufgeführt:
Kamelgehäuse (camelCase)
Als Kamelkappen wird die Praxis bezeichnet, Sätze ohne Leerzeichen oder Satzzeichen zu schreiben und Wörter mit einem einzigen Großbuchstaben zu trennen. Der allererste Buchstabe ist klein geschrieben. Lokale Variablen und Methodenparameter sind Camel Case. Zum Beispiel:
examplePlayerController
maxHealthPoints
endOfFile
Fall Pascal (Fall Pascal)
Pascal-Fall ist eine Variante des Kamelfalls, bei dem der Anfangsbuchstabe groß geschrieben wird. Verwenden Sie dies für Klassen-, öffentliche Felder und Methodennamen in der Entwicklung von Unity. Zum Beispiel:
ExamplePlayerController
MaxHealthPoints
EndOfFile
Schlangenfall (snake_case)
In diesem Fall werden Leerzeichen zwischen Wörtern durch ein Unterstrichzeichen ersetzt. Zum Beispiel:
example_player_controller
max_health_points
end_of_file
Kebab-Fall (Kebab-Fall)
Hier werden Leerzeichen zwischen Wörtern durch Striche ersetzt. Die Wörter erscheinen auf einem „Spieß“ aus Strichzeichen. Zum Beispiel:
example-player-controller
Max-Gesundheitspunkte
Dateiende
naming-conventions-methodology
Der Kebab-Fall wird häufig in Webtechnologien und insbesondere für CSS eingesetzt. Wir empfehlen es auch für die Verwendung mit dem UI Toolkit USS.
Ungarische Schreibweise
Die Variable oder der Funktionsname gibt oft ihre Absicht oder ihren Typ an. Zum Beispiel:
Int iCounter
String strPlayerName
Die ungarische Schreibweise ist eine ältere Konvention und in der Entwicklung von Unity nicht üblich.
Beachten Sie diese Regeln für Ihre Variablen und Felder:

Enums sind spezielle Werttypen, die durch einen Satz benannter Konstanten definiert sind. Standardmäßig sind die Konstanten ganze Zahlen, die von Null hochgezählt werden.
Verwenden Sie Pascal case für Enum-Namen und -Werte. Sie können öffentliche Enums außerhalb einer Klasse platzieren, um sie global zu gestalten. Verwenden Sie ein singuläres Substantiv für den Enum-Namen, da es einen einzelnen Wert aus einer Reihe möglicher Werte darstellt. Sie sollten kein Präfix oder Suffix haben.
Hinweis: Bitweise Enums, die mit dem Attribut System.FlagsAttribute markiert sind, bilden die Ausnahme von dieser Regel. Normalerweise pluralisieren Sie diese, da sie mehrere Typen repräsentieren.
Beachten Sie diese Standardregeln, wenn Sie Ihre Klassen und Schnittstellen benennen:
In C# wird jede ausgeführte Anweisung im Kontext einer Methode ausgeführt.
Hinweis: „Funktion“ und „Methode“ werden in der Entwicklung von Unity oft austauschbar verwendet. Da Sie eine Funktion jedoch nicht schreiben können, ohne sie in eine Klasse in C# aufzunehmen, ist „Methode“ der akzeptierte Begriff.
Methoden führen Aktionen aus, wenden Sie also diese Regeln an, um sie entsprechend zu benennen:
Ereignisse in C# implementieren das Beobachtermuster. Dieses Softwaredesignmuster definiert eine Beziehung, in der ein Objekt, das Subjekt (oder der Herausgeber), eine Liste von abhängigen Objekten, die Beobachter (oder Abonnenten) genannt werden, benachrichtigen kann. So kann das Subjekt Zustandsänderungen an seine Beobachter senden, ohne die beteiligten Objekte eng zu koppeln. Weitere Informationen zur Verwendung des Beobachters und anderer Designmuster in Ihren Unity Projekten finden Sie im E-Book Verbessern Sie Ihren Code mit Designmustern und SOLID.
Benennen Sie das Ereignis mit einer Verbphrase. Wählen Sie einen Namen aus, der die Zustandsänderung genau kommuniziert. Verwenden Sie den aktuellen oder vergangenen Teilnehmer, um Ereignisse „vorher“ oder „nachher“ anzugeben. Geben Sie beispielsweise „OpeningDoor“ für eine Veranstaltung vor dem Öffnen einer Tür oder „DoorOpened“ für eine Veranstaltung danach an.
In den meisten Fällen kann der Aktionsdelegierte die für das Gameplay erforderlichen Ereignisse verwalten. Sie können überall 0 bis 16 Eingabeparameter unterschiedlichen Typs mit einem Rückgabetyp für Leerzeichen übergeben. Die Verwendung des vordefinierten Delegaten speichert Code.
Hinweis: Sie können auch den EventHandler oder EventHandler-Delegaten verwenden. Vereinbaren Sie als Team, wie alle Veranstaltungen durchführen werden.
Das Subjekt, das das Ereignis aufruft, tut dies normalerweise über eine Methode, der „On“ vorangestellt ist, z. „OnOpeningDoor“ oder „OnDoorOpened“.
Wenn der Betreff „GameEvents“ genannt wird, können Ihre Beobachter eine Methode namens „GameEvents_OpeningDoor“ oder „GameEvents_DoorOpened“ verwenden. Beachten Sie, dass dies die „Event-Handling-Methode“ genannt wird, nicht zu verwechseln mit dem EventHandler-Delegaten.
Erstellen Sie benutzerdefinierte EventArgs nur nach Bedarf. Wenn Sie benutzerdefinierte Daten an Ihr Event übergeben müssen, erstellen Sie einen neuen Typ von EventArgs, die entweder von System.EventArgs oder von einer benutzerdefinierten Struktur geerbt werden.
Verwenden Sie Namespaces, um sicherzustellen, dass Ihre Klassen, Schnittstellen, Enums usw. nicht mit bestehenden aus anderen Namespaces oder dem globalen Namespace kollidieren. Namespaces können auch Konflikte mit Assets von Drittanbietern aus dem Asset Store verhindern.
Beim Anwenden von Namespaces:
Im Code werden diese Klassen als Enemy.Controller1 bzw. Enemy.Controller2 bezeichnet. Fügen Sie eine verwendende Zeile hinzu, um die Eingabe des Präfixes zu sparen:
Nutzung von Enemy;
Wenn der Compiler die Klassennamen Controller1 und Controller2 findet, versteht er, dass Sie Enemy.Controller1 und Enemy.Controller2 meinen.
Wenn das Skript auf Klassen mit demselben Namen aus verschiedenen Namespaces verweisen muss, verwenden Sie das Präfix, um sie zu unterscheiden. Wenn Sie beispielsweise eine Controller1- und Controller2-Klasse im Player-Namespace haben, können Sie Player.Controller1 und Player.Controller2 ausschreiben, um Konflikte zu vermeiden. Andernfalls meldet der Compiler einen Fehler.
Nutzung von Enemy;
Erfahren Sie hier mehr über die allgemeine Formatierung oder sehen Sie sich das vollständige E-Book an. Sie können sich auch unser Beispiel für Codestilanleitungen ansehen.