Neue Funktionen in C # 6

C # 6 wird mit Visual Studio 2015 ausgeliefert und bietet einige interessante neue Funktionen. Es gibt zahlreiche Funktionen, die weniger Code-Unordnung fördern und saubereren, wartbaren Code schreiben. In diesem Beitrag möchte ich Ihnen einige der neuen Funktionen in C # -Sprache vorstellen.

Ausnahmefilter

Ausnahmefilter sind in VB nicht neu - jetzt haben Sie diese Funktion auch in C #. Mit diesen können Sie Ausnahmen in Ihrem Code nach Schweregrad filtern. Hier ist ein Beispiel.

try

{

//some code that might throw an exception

}

catch (Exception exception) if(exception.GetType() != typeof(SqlException))

{

ExceptionManager.HandleException(exception);

}

Der obige Code prüft, ob die ausgelöste Ausnahme vom Typ SqlException ist. Wenn nicht, wird die Ausnahme behandelt. Hier ist ein weiteres Beispiel, das zeigt, wie Sie die Message-Eigenschaft des Ausnahmeobjekts überprüfen und eine entsprechende Bedingung angeben können.

try

{

throw new CustomException("");

}

catch (CustomException ex) if (ex.Message == "")

{

//control will come in this catch block

}

catch (CustomException ex) if (ex.Message == "")

{

//control will not come in this catch block

}

Unterstützung für Asynchronität in catch und schließlich blockiert

Dies ist in der Tat eine großartige Funktion. Wir protokollieren häufig Ausnahmen in einer Datei oder einer Datenbank. Solche Vorgänge sind ressourcenintensiv und zeitaufwändig, da Sie auf die Festplatte zugreifen müssen, um E / A auszuführen. In solchen Situationen wäre es großartig, wenn Sie in Ihren Ausnahmeblöcken asynchrone Aufrufe tätigen könnten. Möglicherweise müssen Sie auch einige Bereinigungsvorgänge im finally-Block ausführen, die ressourcenintensiv und / oder zeitaufwändig sein können.

Mit C # 6 müssen Sie den aktuellen Thread nicht mehr blockieren, während Sie solche ressourcenintensiven oder zeitaufwändigen Vorgänge ausführen. Das als nächstes angegebene Code-Snippet zeigt, wie Sie das Schlüsselwort await in catch verwenden und schließlich blockieren können.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

Das folgende Code-Snippet zeigt, dass Sie auf einen Aufruf der benutzerdefinierten Methode LogExceptionAsync () warten können, um eine Ausnahme zu protokollieren.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Unterstützung für statische "using" -Anweisungen

Dies ist eine weitere nette neue Funktion in C # 6, mit der Sie eine statische Methode aufrufen können, ohne dass explizite Verweise erforderlich sind. Hier ist ein Beispiel.

using System;

using System.Console;

public class Program

{

private static void Main()

{

WriteLine("New features in C# 6");

}

}

Wie Sie im obigen Codefragment sehen können, müssen Sie den Typ nicht mehr explizit angeben, wenn Sie die statische WriteLine () -Methode aufrufen, die zur System.Console-Klasse gehört. Im Wesentlichen fördert diese Funktion saubereren Code - Code, der einfacher zu lesen, zu schreiben und zu warten ist.

Auto-Eigenschaftsinitialisierer

Mit dieser Funktion können Sie die Werte von Eigenschaften genau an der Stelle festlegen, an der sie deklariert sind.

class Customer

{

public string FirstName { get; set; } = "Joydip";

public string LastName { get; set; } = "Kanjilal";

public int Age { get; set; } = 44;

}

In früheren Versionen von C # mussten Sie häufig Standardkonstruktoren verwenden, um Standardwerte für die Eigenschaften in der Klasse festzulegen.

Hier ist ein weiteres Beispiel, das eine Verknüpfungssyntax zum Initialisieren einer Eigenschaft an einem Deklarationspunkt veranschaulicht, für den kein Setter definiert wurde.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Wörterbuchinitialisierer

Mit dieser Funktion können Sie Standardwerte in einem Wörterbuch mit viel weniger Code initialisieren. Hier ist ein Beispiel, das dies veranschaulicht.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Wie Sie im obigen Codeausschnitt sehen können, wurde das Wörterbuch an der Stelle, an der es deklariert wurde, mit Standardwerten initialisiert. Ein viel schönerer Ansatz im Vergleich zu früheren Versionen der C # -Sprache, nicht wahr?

Primärkonstruktor

Dies ist wiederum eine hervorragende neue Funktion - sie beseitigt den Aufwand, Code schreiben zu müssen, um Datenelemente einer Klasse aus den Parametern einer Konstruktormethode zu initialisieren. Mit anderen Worten, diese Funktion bietet eine syntaktische Verknüpfung für die Definition eines Konstruktors in einer Klasse.

Hier ist ein Beispiel, das zeigt, wie Primärkonstruktoren verwendet werden können.

class Employee(string firstName, string lastName, string address)

{

public string FirstName { get; set; } = firstName;

public string LastName { get; set; } = lastName;

public string Address { get; set; } = address;

}

Weitere Informationen zu den neuen Funktionen und Verbesserungen in C # 6 finden Sie in diesem MSDN-Artikel.