Was ist neu in C# 10?

C# 10 wurde im November 2021 zusammen mit Visual Studio 2022 und .NET 6 veröffentlicht. Es fügt viele neue Funktionen hinzu, die die Arbeit damit einfacher und bequemer machen. Hier ist eine Tour durch einige der nützlichsten Plugins und wie sie Ihren Workflow verbessern.

Was ist neu in C#10? -%Kategorien

Datei-Domain-Namespaces

Beginnen wir mit einer der einfachsten und vielleicht wichtigsten Änderungen. Sie können jetzt über eine neue Option für die Namensraum-Schlüsselwortsyntax einen Namespace auf eine gesamte Datei anwenden. Der verbleibende Namespace wird automatisch in die Datei eingefügt, auch wenn er nicht innerhalb des Namespace-Blocks eingerückt ist. Dies funktioniert ähnlich wie Namespace-Deklarationen in PHP.

In C# 9 brauchte ich diesen Code für einen Klassennamespace:

Namensraum Demo {
 
    Öffentlichkeit Klasse Beispiel {
    }
 
}

In C# 10 können Sie stattdessen Folgendes verwenden:

Namensraum Demo;
 
Öffentlichkeit Klasse Beispiel {
}

Dadurch sparen Sie horizontalen Platz in Ihrem Editor, indem Sie die Einrückungsebene ausschneiden. Wenn eine Datei mehrere Klassen enthalten muss, können Sie sie alle beginnend bei Spalte Null schreiben – die Namespace-Deklaration gilt für die gesamte Datei.

weltweite Verwendungen

Einige Namespaces werden häufig projektübergreifend verwendet. Sie müssen sie jedoch immer noch manuell in jede Datei mit einer use-Anweisung einfügen.

C# 10 ändert dies, um eine globale Variable mit . Dadurch wird der angegebene Namespace für alle Dateien in Ihrem Projekt zugänglich.

globale  Verwendung von System;

Du kannst hinzufügen weltweite Verwendungen in eine beliebige Datei, die in Ihre Baugruppe aufgenommen wird. Es unterstützt alle Funktionen von Standardverwendungsanweisungen, einschließlich des statischen Schlüsselworts und des Alias ​​mit =.

Lesen Sie auch:  Was ist eine eSIM und unterstützt Ihr Mobilfunkanbieter sie?

Die Annahme globaler Verwendungen reduziert die Anzahl der von Ihnen eingegebenen Zeilen, ist jedoch immer noch am besten für häufig referenzierte Namespaces reserviert, die eine geringe Wahrscheinlichkeit von Namenskollisionen bieten. Beachten Sie, dass Ihr Code mehrdeutig werden kann, wenn Sie sich auf die globale Verwendung verlassen, da neue Mitwirkende möglicherweise nicht sofort erkennen, wie eine Namespace-Ressource eingebunden wurde.

Der mit globalen Verwendungen verbundene Vorteil sind implizite Verwendungen. Dadurch werden automatisch generische Verwendungsanweisungen erstellt, die für Ihren Projekttyp geeignet sind. Die Funktion ist in .NET 6-Projektvorlagen standardmäßig aktiviert. Sie kann mit der Einstellung ImplicitUsings in Ihrer .csproj-Datei deaktiviert werden.

verbesserte Strukturen

Die Strukturen haben viele Verbesserungen erhalten, die sie den Klassen näher bringen. Dazu gehören parameterlose Konstruktoren, Feldinitialisierer, vollständige Unterstützung für Ausdrücke und die Option zum Erstellen von Datensatzstrukturen:

Öffentlichkeit Rekordpunkt(int X, int Y);

Dieses Beispiel erstellt eine Datensatzstruktur.“lokalisiertwobei die Konstruktorparameter X und Y zu impliziten globalen Membern werden. Sie können Elemente auch manuell mit der aktuellen Syntax definieren:

Öffentlichkeit Rekord struct Points {
    Öffentlichkeit int X { bekommen; init; }
    Öffentlichkeit int Y { bekommen; init; }
}

Die Protokollstruktur sollte in Szenarien verwendet werden, in denen Sie einige Daten kapseln müssen, ohne benutzerdefiniertes Verhalten als Methoden für Ihre Klasse einzuschließen. Die Registrierungsstruktur bietet Tests und Äquivalenzfunktionen Integrierter Wert Wie ToString(). Es kann über das schreibgeschützte Schlüsselwort entweder veränderlich oder unveränderlich sein.

Verbesserungen des Lambda-Ausdrucks

C# 10 fügt mehrere Verbesserungen an Lambda-Ausdrücken hinzu, die ihre Typen und Syntax abdecken. Ziel ist es, Lambdas näher an reguläre Methoden und lokale Funktionen zu bringen. Die Auswahl eines von ihnen wird jetzt eine vertrautere Erfahrung sein.

Lesen Sie auch:  Google stellt Gemma vor, ein leichtes Open-Source-KI-System

Der Begriff des Genres wurde eingeführt.Natürlich. Dadurch kann der Compiler einen Lambda-Typ ableiten, ohne ihn manuell in einen Delegaten oder Ausdruck zu konvertieren. Dadurch wird lesbarerer Code erstellt, wenn einer Variablen ein Lambda zugewiesen wird:

// C#9
Func<Schnur, int> zuInt = (Schnur s) => int.Analysieren(s);
 
// C#10
jung zuInt = (Schnur s) => int.Analysieren(s)

Der Compiler leitet den toInt-Typ als Func . ab Dies wird angezeigt, wenn der Code in Visual Studio angezeigt wird. Inferenzen verwenden Func, Action oder zusammengesetzte Delegaten.

Natürliche Typen funktionieren nur, wenn der Lambda-Ausdruck bereits vollständig geschrieben ist. Wenn Sie Parametertypen weglassen, kann der Compiler keine kompatible Typdefinition erstellen.

Eine damit verbundene Änderung ist die Unterstützung für explizite Rückgabetypen. Wie bei einer regulären Funktion steht der Rückgabetyp vor der Liste der Lambda-Parameter:

jung zuInt = int (Schnur s) => int.Analysieren(s)

Schließlich können Lambdas jetzt Attribute auf die gleiche Weise wie Methoden und Funktionen annehmen. Sie werden am Anfang eines Lambda-Ausdrucks vor dem Rückgabetyp und der Parameterliste platziert. Sie können Attribute verwenden, um Ihren Lambda-Zeichen zusätzliche Metadaten anzuhängen, um eine weitere Introspektion und Codeanalyse zu erleichtern.

jung zuInt = [Demoattribute()] int (Schnur s) => int.Analysieren(s)

Vielseitige und unzusammenhängende Aufgaben

Disassemblierungszuweisungen können jetzt neue Variablen initialisieren und Variablen auf derselben Zeile Werte zuweisen. Zuvor musste ich für diese Vorgänge separate Disassemblies verwenden.

In C# 9 führte dies zu Code, der wie folgt aussah:

int x = 0;
int y = 0;
(x, y) = Punkt;
 
(int z) = Punkt;

In C# 10 können Sie dies tun:

int x = 0;
int y = 0;
(x,y, int z) = Punkt;

x, y und z werden jetzt mit Werten initialisiert, indem die einzelne Disassemblierungsaufgabe verwendet wird, wodurch die Redundanz im Code reduziert wird.

Lesen Sie auch:  10 Gründe, warum Sie von Chrome zu Firefox wechseln sollten

Andere Änderungen

Die String-Interpolation wurde verbessert und funktioniert jetzt auch mit statischen Strings. Sie müssen sicherstellen, dass alle Zeichenfolgen, die während der Interpolation zum Füllen von Platzhalterlöchern verwendet werden, selbst konstante Werte sind. In einem größeren Maßstab können Interpolationsverbesserungen die Speichernutzung reduzieren und die Leistung durch die Verwendung dedizierter Prozessoren erhöhen.

Eigenschaftsmuster wurden vereinfacht, um einen lesbareren Zugriff auf verschachtelte Eigenschaften zu ermöglichen. Sie können jetzt die Punktsyntax verwenden, um auf verschachtelte Eigenschaftswerte zuzugreifen, anstatt auf mehrere Ebenen von Klammern:

// C#9
{ Training: {Ankunftszeit: "10: 00"} }
 
// C#10
{ Training.Ankunftszeit: "10: 00" }

An anderer Stelle bedeuten Compiler-Optimierungen, dass Sie bei gegebenen Zuweisungen und Nullzustandsprüfungen von weniger Fehlalarmen profitieren. Mehrere C#9-Probleme, die bei der Kompilierung zu falschen Warnungen führten, wurden behoben, was zu genaueren Überprüfungen führte, die Ihnen beim Debuggen wirklich wichtiger Probleme besser helfen. Probleme waren mit der Verwendung von Null-Integrationsausdrücken und Kovariaten gegenüber booleschen Konstanten verbunden.

Abschluss

C# 10 fügt mehrere neue Funktionen hinzu, die die Entwicklung einfacher machen. Es hat jedoch Viele andere neue Funktionen wurden zurückgegeben Einschließlich des Feldschlüsselworts und der erforderlichen Eigenschaften zur nächsten Hauptversion. Es war fertig Attributtransformation öffentliche und statische Zusammenfassungsmember für Schnittstellen zu 10, aber noch an das Vorschau-Tag angehängt.

Sie können auch mögen