Neues in C# 7.2What's new in C# 7.2

C# 7.2 ist ein weiteres Release einer Unterversion, das eine Reihe nützlicher Funktionen ergänzt.C# 7.2 is another point release that adds a number of useful features. Ein Aspekt für diesen Release ist die effizientere Arbeit mit Werttypen durch Vermeiden unnötiger Kopien oder Zuweisungen.One theme for this release is working more efficiently with value types by avoiding unnecessary copies or allocations.

Die restlichen Funktionen sind kleine Features, die den Komfort steigern.The remaining features are small, nice-to-have features.

C# 7.2 verwendet das Konfigurationselement Sprachversionsauswahl, um die Version der Compilersprache auszuwählen.C# 7.2 uses the language version selection configuration element to select the compiler language version.

Die neuen Sprachfeatures in diesem Release umfassen:The new language features in this release are:

Erweiterungen von sicherem, effizientem CodeSafe efficient code enhancements

In 7.2 eingeführte Sprachfeatures ermöglichen das Arbeiten mit Werttypen bei Verwendung der Verweissemantik.Language features introduced in 7.2 let you work with value types while using reference semantics. Sie dienen dazu, die Leistung durch Minimieren des Kopierens von Werttypen zu steigern, ohne die Speicherzuweisungen nach sich zu ziehen, die eine Verwendung von Verweistypen mit sich bringen würde.They are designed to increase performance by minimizing copying value types without incurring the memory allocations associated with using reference types. Das Feature beinhaltet:The features include:

  • Den in-Modifizierer für Parameter zur Angabe, dass ein Argument durch Verweis übergeben, von der aufgerufenen Methode aber nicht verändert wird.The in modifier on parameters, to specify that an argument is passed by reference but not modified by the called method. Das Hinzufügen des Modifizierers in zu einem Argument ist eine quellkompatible Änderung.Adding the in modifier to an argument is a source compatible change.
  • Der ref readonly-Modifizierer für die Methodenrückgabe, um anzugeben, dass eine Methode ihren Wert als Verweis zurückgibt und keinen Schreibzugriff auf dieses Objekt zulässt.The ref readonly modifier on method returns, to indicate that a method returns its value by reference but doesn't allow writes to that object. Das Hinzufügen des Modifizierers ref readonly ist eine quellkompatible Änderung, wenn die Rückgabe einem Wert zugewiesen wird.Adding the ref readonly modifier is a source compatible change, if the return is assigned to a value. Das Hinzufügen des Modifizierers readonly zu einer vorhandenen ref-Rückgabeanweisung ist eine inkompatible Änderung.Adding the readonly modifer to an existing ref return statement is an incompatible change. Es verlangt von Aufrufern das Aktualisieren der lokalen ref-Variablen, um den readonly-Modifizierer einzuschließen.It requires callers to update the declaration of ref local variables to include the readonly modifier.
  • Die readonly struct-Deklaration, um anzugeben, dass eine Struktur unveränderlich ist und ihren Membermethoden als in-Parameter übergeben werden sollte.The readonly struct declaration, to indicate that a struct is immutable and should be passed as an in parameter to its member methods. Das Hinzufügen des Modifizierers readonly zu einer vorhandenen Strukturdeklaration ist eine binärkompatible Änderung.Adding the readonly modifier to an existing struct declaration is a binary compatible change.
  • Die ref struct-Deklaration, um anzugeben, dass ein Strukturtyp direkt auf verwalteten Arbeitsspeicher zugreift und immer per Stapel zugeordnet werden muss.The ref struct declaration, to indicate that a struct type accesses managed memory directly and must always be stack allocated. Das Hinzufügen des Modifizierers ref zu einer vorhandenen struct-Deklaration ist eine inkompatible Änderung.Adding the ref modifier to an existing struct declaration is an incompatible change. Ein ref struct kann kein Mitglied einer Klasse sein oder an anderen Stellen verwendet werden, wo es auf dem Heap zugewiesen werden könnte.A ref struct cannot be a member of a class or used in other locations where it may be allocated on the heap.

Weitere Informationen zu all diesen Änderungen finden Sie unter Schreiben von sicherem und effizientem Code.You can read more about all these changes in Write safe efficient code.

Nicht schließende benannte ArgumenteNon-trailing named arguments

Methodenaufrufe dürfen jetzt benannte Argumente verwenden, die positionellen Argumenten vorstehen, wenn diese benannten Argumente in der richtigen Position verwendet werden.Method calls may now use named arguments that precede positional arguments when those named arguments are in the correct positions. Weitere Informationen finden Sie unter Benannte und optionale Argumente.For more information see Named and optional arguments.

Führende Unterstriche in numerischen LiteralenLeading underscores in numeric literals

Die Implementierung der Unterstützung für Stellentrennzeichen in C# 7.0 ließ den Unterstrich _ nicht als erstes Zeichen von Literalwerten zu.The implementation of support for digit separators in C# 7.0 didn't allow the _ to be the first character of the literal value. Hexadezimale und binäre numerische Literale dürfen jetzt mit einem _ beginnen.Hex and binary numeric literals may now begin with an _.

Zum Beispiel:For example:

int binaryValue = 0b_0101_0101;

Zugriffsmodifizierer private protectedprivate protected access modifier

Schließlich zeigt der neue, zusammengesetzte Zugriffsmodifizierer private protected an, dass auf ein Element durch eine es enthaltende Klasse oder durch innerhalb der gleichen Assembly deklarierte abgeleitete Klassen zugegriffen werden darf.Finally, a new compound access modifier: private protected indicates that a member may be accessed by containing class or derived classes that are declared in the same assembly. Während protected internal den Zugriff durch abgeleitete Klassen oder Klassen, die sich in der gleichen Assembly befinden, erlaubt, schränkt private protected den Zugriff auf innerhalb der gleichen Assembly deklarierte abgeleitete Typen ein.While protected internal allows access by derived classes or classes that are in the same assembly, private protected limits access to derived types declared in the same assembly.

Weitere Informationen finden Sie unter Zugriffsmodifizierer in der Sprachreferenz.For more information see access modifiers in the language reference.