NDepend 17.11.2022, 08:46 Uhr

C# 11: Dateiabhängige Typen

Mit C#11 wurde das Feature "File Scoped Types" eingeführt: ein neuer Datei-Modifikator, der auf jede Typdefinition angewendet werden kann, um ihre Verwendung auf die aktuelle Datei zu beschränken.
(Quelle: NDepend.com)
Entwickler können mit Hilfe von Dateiabhängigen Typen mehrere Klassen mit dem gleichen Namen (namespace.name) in einem einzigen Projekt haben. Ein Beispiel dafür zeigt dieser NDpend-Beitrag.
Gleichnamige Dateien in demselben Namespace - wofür braucht man das? Der genannte NDependend-Beitrag nennt dafür diese Anwendungsfälle:
  • Generierter Code: Typischerweise verwenden generierte Templates immer wieder denselben Klassennamen, wie Item, Info oder DataSet. Um Kollisionen zu vermeiden, mussten Entwickler entweder eine Item-Klasse in einer übergeordneten Klasse verschachteln oder einen Index im Namen für jede generierte Version beibehalten (Beispiel Item1, Item2, ...). Mit dateiabhängigen Typen wird das einfacher.
  • Erweiterungsmethoden: Extension Methods sind ein beliebtes Sprachkonstrukt für C#-Entwickler. Allerdings kann es bei der Benennung von Erweiterungsmethoden zu Kollisionen kommen. Mit die Einschränkung der Dateisichtbarkeit ist es einfach, Erweiterungsmethoden auf eine einzige Datei zu beschränken.
  • Verschachtelte Klassen: Um die Namenskollision innerhalb eines Projekts zu lösen, ist eine gängige Lösung, dass man private verschachtelte Klassen deklariert. Dies ist jedoch kein sauberer Code, da eine zusätzliche Einrückungsebene hinzugefügt wird. Das Schlüsselwort file hilft bei diesem Problem.
  • Modul und Verkapselung: In der Regel handelt es sich bei einem Modul oder einer Komponente nicht um eine einzelne Klasse, sondern um einige zusammenhängende Typen. Zum Zweck der Kapselung wurden private Implementierungsdetails in private verschachtelte Klassen und Typen eingebettet. Der Dateiscope macht dieses Kapselungsmuster sauberer.
  • Testen: Oft ist die Struktur von Tests standardisiert und jede Testklasse hat zum Beispiel ihre eigene DataSet-Klasse. Auch hier hilft die Dateibeschränkung, anstatt in Testklassen verschachtelte Klassen zu deklarieren.
Weitere Informationen zum Thema finden Sie hier.


Das könnte Sie auch interessieren