C# Verwendung von Direktiven und Typaliasen in .NET 8
Das using Schlüsselwort in C# macht mehr als eine Sache, und der Unterschied zwischen seiner grundlegenden Form und seinen neueren Fähigkeiten ist größer, als die meisten Entwickler erkennen. Namespace-Abkürzungen gibt es seit Anfang an, statische Klassenimporte kamen mit .NET 6, und .NET 8 hat die Alias-Syntax erweitert, um jeden Typ abzudecken, einschließlich Tupeln. Alle drei Formen zu kennen, ermöglicht es Ihnen, sich wiederholende Typ-Deklarationen auf einen einzigen gut lesbaren Namen am Anfang einer Datei zu reduzieren.
Dieser Leitfaden untersucht jede Form der using Direktive in einer .NET 8-Konsolenanwendung, basierend auf Tim Coreys Durchgang durch die neuesten Funktionen. Wir bauen von der bekannten Namensraum-Verkürzung bis hin zur neuen Typalias-Syntax auf.
Ausgangspunkt: Die grundlegende Namensraum-Direktive
[0:35 - 1:35] Die Einrichtung beginnt mit der Deaktivierung impliziter Usings, sodass jede Direktive im Code deutlich sichtbar ist. Ohne using Anweisungen am Anfang erfordert das Aufrufen von Console.WriteLine den vollqualifizierten Namen: System.Console.WriteLine. Das Hinzufügen einer einzelnen Direktive löst dies:
using System;
using System;
Diese eine Zeile macht jeden Typ innerhalb von System mit seinem Kurzname verfügbar. Die Direktive ist kein Import im bibliothekarischen Sinne; es wird kein neuer Code hinzugefügt. Es ist eine Namensraum-Verkürzung, die dem Compiler mitteilt, wo er suchen soll, wenn er auf einen unqualifizierten Typnamen stößt.
Verwendung von statisch: Überspringen des Klassen-Namens
[2:19 - 2:45] Die using static Form zielt auf eine bestimmte statische Klasse anstelle eines Namespace. Indem man auf System.Console verweist, wird jedes statische Mitglied dieser Klasse ohne Klassenpräfix verfügbar:
using static System.Console;
WriteLine("Hello, world!");
using static System.Console;
WriteLine("Hello, world!");
Anstelle von Console.WriteLine ruft man direkt WriteLine auf. Diese Form, die mit .NET 6 eingeführt wurde, ist besonders nützlich, wenn eine Datei dieselbe statische Klasse mehrfach aufruft. Das Eliminieren des wiederholten Klassennamens reduziert den visuellen Lärm an jeder Aufrufstelle.
Typalias: Benennen eines beliebigen Typs
[3:41 - 6:40] .NET 8 hat die Alias-Syntax so erweitert, dass using einem beliebigen Typ einen Kurznamen zuweisen kann. Ein motivierender Fall ist ein benanntes Tupel. Tupel sind gängige Rückgabewerte, wenn eine Methode mehrere verwandte Werte zurücksenden muss, ohne eine vollständige Klassendefinition, aber das Deklarieren desselben Tupeltyps mehrmals in einer Datei führt zu vielen Wiederholungen:
// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();
// Without an alias, each declaration repeats the full tuple type
(string FirstName, string LastName) GetUser() { ... }
(string FirstName, string LastName) person = GetUser();
Ein Typalias reduziert dies auf eine einzige Deklaration am Anfang:
using Person = (string FirstName, string LastName);
using Person = (string FirstName, string LastName);
Von diesem Punkt an im Dokument steht Person für die vollständige Tupeldefinition:
Person GetUser() { ... }
Person person = GetUser();
Person GetUser() { ... }
Person person = GetUser();
Der Alias lebt nur innerhalb der Datei, in der er deklariert ist. Er breitet sich nicht über die gesamte Anwendung aus. Beachten Sie, dass wenn der Typ im gesamten Projekt verfügbar sein muss, ein Record oder eine Klasse die geeignete Wahl ist.
Alias vs. Record oder Klasse
[5:32 - 6:23] Eine häufig gestellte Frage: Wenn Person wie ein Record aussieht, warum dann nicht einfach einen deklarieren? Die Antwort liegt im Bereich und Gewicht. Ein Record oder Klasse ist ein benannter Typ, der im gesamten Projekt existiert, seine eigene Datei trägt und gewartet werden muss, während sich die Codebasis entwickelt. Ein Tupelalias ist eine lokal in einer Datei befindliche Bequemlichkeit. Wenn Sie ein Zwei-Feld-Tupel zwei- oder dreimal innerhalb einer Klassen-Datei verwenden, fügt die Erstellung einer vollständigen Typdefinition einen Wartungsaufwand hinzu, den der Alias vermeidet. Die Absicht des .NET-Teams ist es, eine Reihe von Optionen zu bieten, anstatt eine binäre Wahl zwischen einem rohen Tupel und einer vollständigen Klasse zu erzwingen.
Abschluss
Die drei using Formen decken unterschiedliche Bedürfnisse ab. Die grundlegende Namespace-Direktive verkürzt qualifizierte Typnamen in einem gesamten Dokument, während using static das Klassenpräfix von statischen Memberaufrufen entfernt. Der .NET 8 Typalias weist jedem Typ, einschließlich Tupeln, der auf eine einzige Datei beschränkt ist, einen lesbaren Namen zu. Jede Form verringert Wiederholungen, ohne das grundlegende Verhalten Ihres Codes zu ändern.
Sehen Sie sich das vollständige Video auf Tim Coreys YouTube Kanal für eine live Demonstration aller drei Formen in einem funktionierenden .NET 8 Projekt an.
