17.11.2022
NDepend
Dateiabhängige Typen in C# 11
Autor: Bernhard Lauer
NDepend.com
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.
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.
Test-Framework
Testautomatisierung mit C# und Atata
Atata ist ein umfassendes C#-Framework für die Web-Testautomatisierung, das auf Selenium WebDriver basiert. Es verwendet das Fluent Page Object Pattern und verfügt über ein einzigartiges Protokollierungssystem sowie Trigger-Funktionalitäten.
>>
Programmiersprache
Primärkonstruktoren in C# erleichtern den Code-Refactoring-Prozess
Zusammenfassen, was zusammen gehört: Dabei helfen die in C# 12 neu eingeführten Primärkonstruktoren, indem sie Code kürzer und klarer machen.
>>
Tools
GitLab Duo Chat mit KI-Chat-Unterstützung
Der DevSecOps-Plattform-Anbieter GitLab führt den GitLab Duo Chat ein. Dieses Tool integriert Künstliche Intelligenz in die DevSecOps-Workflows.
>>
Bildbearbeitungs-Tipps
Das neue Paint - Das kann es inklusive KI-Funktionen
Microsoft hat seine altehrwürdige Bildbearbeitungs-Software Paint generalüberholt. Wir erklären die neuen Funktionen und was Sie damit anstellen können.
>>