{"id":52,"date":"2010-02-20T22:33:56","date_gmt":"2010-02-20T21:33:56","guid":{"rendered":"http:\/\/www.steffen-liersch.de\/content\/de\/?p=52"},"modified":"2025-03-02T11:32:08","modified_gmt":"2025-03-02T10:32:08","slug":"net-naming-conventions","status":"publish","type":"post","link":"https:\/\/www.steffen-liersch.de\/content\/de\/2010\/02\/net-naming-conventions\/","title":{"rendered":"Namensrichtlinien f\u00fcr C# und andere .NET-Sprachen"},"content":{"rendered":"<p>Das .NET Framework beinhaltet zahlreiche Klassen und Strukturen, f\u00fcr die gr\u00f6\u00dftenteils einheitliche Namensregeln verwendet wurden. Diese Regeln tragen ma\u00dfgeblich zum schnellen Erfassen von Klassen und Strukturen bei.<!--more--><\/p>\n<p>Die folgenden Richtlinien basieren auf den offensichtlich im .NET Framework verwendeten Regeln. Durch geringf\u00fcgige Erweiterungen k\u00f6nnen weitere positive Effekte f\u00fcr die .NET-basierte Softwareentwicklung erreicht werden.<\/p>\n<h2>Allgemeine Richtlinien<\/h2>\n<p>Benennbare Sprachelemente werden grunds\u00e4tzlich entsprechend der <a href=\"http:\/\/en.wikipedia.org\/wiki\/CamelCase\" rel=\"noopener\">Camel-Case-Konvention<\/a> benannt. Diese erlaubt innerhalb eines Wortes Gro\u00dfbuchstaben am Anfang eines jeden Teilwortes.<\/p>\n<p>Lokale Variablen und Funktionsparameter beginnen immer mit einem Kleinbuchstaben (z.B. firstNode, nextIndex). F\u00fcr alle anderen Elemente wird die Upper-Camel-Case-Konvention benutzt, die auch als Pascal-Konvention bekannt ist (z.B. FileStream, StringBuilder).<\/p>\n<p>Die Benennung erfolgt in englischer Sprache. Es werden lediglich Buchstaben des englischen Alphabets und ggf. Ziffern verwendet.<\/p>\n<h2>Klassen, Strukturen, Aufz\u00e4hlungen und Schnittstellen<\/h2>\n<p>Offiziell wird f\u00fcr die Namensgebung f\u00fcr Klassen, Strukturen und Aufz\u00e4hlungen empfohlen, keine Pr\u00e4fixe zu verwenden. Lediglich Schnittstellen sind mit dem Pr\u00e4fix \"I\" zu versehen. Beispiele:<\/p>\n<ul>\n<li>CollectionBase - Basisklasse f\u00fcr die Erstellung von Listen<\/li>\n<li>Rectangle - Struktur f\u00fcr Koordinaten eines rechteckigen Bereichs<\/li>\n<li>FileMode - Aufz\u00e4hlung f\u00fcr Modus zum \u00d6ffnen einer Datei<\/li>\n<li>IList - allgemeine Listenschnittstelle<\/li>\n<\/ul>\n<p>Unternehmensbezogene Pr\u00e4fixe k\u00f6nnen dennoch hilfreich sein, um Namenskonflikte mit Standardtypen auszuschlie\u00dfen, auch wenn f\u00fcr diesen Zweck eigentlich Namensr\u00e4ume vorgesehen sind.<\/p>\n<h2>Klassenvariablen und Konstanten<\/h2>\n<p>Nicht \u00f6ffentliche Klassenvariablen werden mit dem Pr\u00e4fix \"m_\" gekennzeichnet. F\u00fcr die Benennung nicht \u00f6ffentlicher oder lokaler Konstanten wird \"c_\" als Pr\u00e4fix verwendet. Diese abgewandelte und vereinfachte Form der <a href=\"http:\/\/de.wikipedia.org\/wiki\/Ungarische_Notation\" rel=\"noopener\">ungarischen Notation<\/a> ist offiziell f\u00fcr die .NET-Entwicklung nicht vorgesehen.<\/p>\n<p>Durch diese zwei einfachen Regeln k\u00f6nnen Konstanten, lokale Variablen und Membervariablen jederzeit klar unterschieden werden. Da die Regeln sich lediglich auf nicht \u00f6ffentliche und lokale Elemente beziehen, werden keine Normen f\u00fcr \u00f6ffentliche Elemente beeintr\u00e4chtigt.<\/p>\n<h2>Lokale Variablen<\/h2>\n<p>Lokale Variablen sollten kurz und aussagekr\u00e4ftig sein. Die \u00dcbersichtlichkeit wird durch kurze Namen insbesondere dann erh\u00f6ht, wenn viele lokale Variablen verwendet werden. Hilfsvariablen, die lediglich im Kontext weniger Zeilen benutzt werden, k\u00f6nnen mit einem dem Typ entsprechenden Kurznamen benannt werden. Folgende Kurznamen werden empfohlen:<\/p>\n<ul>\n<li>i, j, k f\u00fcr Variablen des Typs int<\/li>\n<li>s, t, u f\u00fcr Variablen des Typs string<\/li>\n<li>o f\u00fcr Variablen des Typs object<\/li>\n<\/ul>\n<h2>Funktionsparameter<\/h2>\n<p>Funktionsparameter sind mit aussagekr\u00e4ftigen Namen zu versehen. Dadurch wird die Verwendung der jeweiligen Funktion erleichtert. Die Namen von Funktionsparametern bleiben im Gegensatz zu lokalen Variablen im Kompilat (IL-Code) erhalten. Programmierhilfen und Codebrowser zeigen die verwendeten Namen an.<\/p>\n<h2>Benennung von Funktionen<\/h2>\n<p>Funktionen sind stets mit einer Aktion verkn\u00fcpft. Die jeweils realisierte Aktion kann immer mit einem Verb beschrieben werden, das f\u00fcr die Benennung benutzt werden kann.<\/p>\n<p>Parameterlose Funktionen mit R\u00fcckgabewert sollten nicht mit dem Wort \"Get\" beginnen. Stattdessen kann entweder eine Eigenschaft bereitgestellt werden oder ein anderer Name gew\u00e4hlt werden.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Die vorgestellten Regeln zur Benennung von Elementen in C# und anderen .NET-Sprachen k\u00f6nnen wie folgt zusammengefasst werden.<\/p>\n<ul>\n<li>Benennung in englischer Sprache unter Verwendung der Camel-Case-Konvention<\/li>\n<li>Verwendung von Buchstaben des englischen Alphabets und ggf. Ziffern<\/li>\n<li>Pr\u00e4fix \"I\" f\u00fcr Schnittstellentypen<\/li>\n<li>Pr\u00e4fix \"m_\" f\u00fcr nicht \u00f6ffentliche Membervariablen<\/li>\n<li>Pr\u00e4fix \"c_\" f\u00fcr nicht \u00f6ffentliche oder lokale Konstanten<\/li>\n<li>lokale Variablen und Funktionsparameter beginnen immer mit einem Kleinbuchstaben<\/li>\n<li>kurze Namen f\u00fcr lokale Variablen<\/li>\n<li>ausf\u00fchrliche Namen f\u00fcr Funktionsparameter<\/li>\n<\/ul>\n<p>Es existieren weitere wichtige Richtlinien, die bei der Entwicklung von .NET-basierten Anwendungen und Bibliotheken beachtet werden sollten.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das .NET Framework beinhaltet zahlreiche Klassen und Strukturen, f\u00fcr die gr\u00f6\u00dftenteils einheitliche Namensregeln verwendet wurden. Diese Regeln tragen ma\u00dfgeblich zum schnellen Erfassen von Klassen und Strukturen bei.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[21,25,19],"class_list":["post-52","post","type-post","status-publish","format-standard","hentry","category-net","tag-net","tag-cs","tag-basics"],"_links":{"self":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/52","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/comments?post=52"}],"version-history":[{"count":9,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/52\/revisions"}],"predecessor-version":[{"id":829,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/posts\/52\/revisions\/829"}],"wp:attachment":[{"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/media?parent=52"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/categories?post=52"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.steffen-liersch.de\/content\/de\/wp-json\/wp\/v2\/tags?post=52"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}