Nouvelles fonctionnalités en C # 6

C # 6 est livré avec Visual Studio 2015 et propose de nouvelles fonctionnalités intéressantes. Il existe de nombreuses fonctionnalités qui permettent de réduire l'encombrement du code et d'écrire du code plus propre et maintenable. Dans cet article, j'aimerais vous présenter certaines des nouvelles fonctionnalités du langage C #.

Filtres d'exception

Les filtres d'exception ne sont pas nouveaux dans VB - vous avez maintenant cette fonctionnalité en C # également. Ceux-ci vous permettent de filtrer les exceptions dans votre code en fonction de la gravité. Voici un exemple.

try

{

//some code that might throw an exception

}

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

{

ExceptionManager.HandleException(exception);

}

Le code ci-dessus vérifie si l'exception levée est de type SqlException. Sinon, l'exception est gérée. Voici un autre exemple qui montre comment vous pouvez vérifier la propriété Message de l'objet d'exception et spécifier une condition en conséquence.

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

}

Prise en charge de l'asynchronie dans catch et enfin blocs

C'est en effet une fonctionnalité intéressante. Nous enregistrons souvent les exceptions dans un fichier ou une base de données. Ces opérations sont gourmandes en ressources et en temps, car vous auriez besoin d'accéder au disque pour effectuer des E / S. Dans de telles situations, ce serait bien si vous pouviez effectuer des appels asynchrones à l'intérieur de vos blocs d'exceptions. Vous devrez peut-être également effectuer des opérations de nettoyage dans le bloc finally qui peuvent être gourmandes en ressources et / ou en temps.

Avec C # 6, vous n'avez plus besoin de bloquer le thread actuel tout en effectuant de telles opérations gourmandes en ressources ou en temps. L'extrait de code donné ci-dessous illustre comment vous pouvez utiliser le mot clé await dans les blocs catch et finally.

public async Task ProcessAsync()

{

try

{

//some code that might throw an exception

}

catch

{

await Task.Delay(5000);

}

finally

{

await Task.Delay(1000);

}

}

L'extrait de code suivant montre que vous pouvez attendre un appel à la méthode personnalisée LogExceptionAsync () pour consigner l'exception.

try

{

//code that might throw an exception

}

catch (Exception exception)

{

await LogExceptionAsync(exception);

}

Prise en charge des instructions statiques "using"

C'est une autre nouvelle fonctionnalité intéressante de C # 6 qui vous permet d'appeler une méthode statique sans avoir besoin de références explicites. Voici un exemple.

using System;

using System.Console;

public class Program

{

private static void Main()

{

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

}

}

Comme vous pouvez le voir dans l'extrait de code ci-dessus, vous n'avez plus besoin de spécifier explicitement le type lors de l'appel de la méthode statique WriteLine () qui appartient à la classe System.Console. En substance, cette fonctionnalité favorise un code plus propre - un code plus facile à lire, à écrire et à maintenir.

Initialiseurs de propriétés automatiques

Cette fonctionnalité vous permet de définir les valeurs des propriétés directement à l'endroit où elles sont déclarées.

class Customer

{

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

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

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

}

Dans les versions antérieures de C #, vous deviez souvent utiliser des constructeurs par défaut pour définir les valeurs par défaut des propriétés de la classe.

Voici un autre exemple qui illustre une syntaxe de raccourci pour initialiser une propriété au point de déclaration pour laquelle un setter n'a pas été défini.

class LogManager

{

public static LogManager Instance { get; } =

new LogManager();

}

Initialiseurs de dictionnaire

Cette fonctionnalité vous permet d'initialiser les valeurs par défaut dans un dictionnaire avec beaucoup moins de code. Voici un exemple qui illustre cela.

class Program

{

static void Main(string[] args)

{

Dictionary dict = new Dictionary()

{

["USA"] = "Washington DC",

["England"] = "London",

["India"] = "New Delhi"

};

}

}

Comme vous pouvez le voir dans l'extrait de code ci-dessus, le dictionnaire a été initialisé avec les valeurs par défaut au point où il a été déclaré. Une approche beaucoup plus agréable par rapport aux versions précédentes du langage C #, n'est-ce pas?

Constructeur principal

C'est encore une excellente nouvelle fonctionnalité - elle élimine la douleur d'avoir à écrire du code pour initialiser les données membres d'une classe à partir des paramètres d'une méthode de constructeur. En d'autres termes, cette fonctionnalité fournit un raccourci syntaxique pour la définition d'un constructeur dans une classe.

Voici un exemple qui illustre comment les constructeurs principaux peuvent être utilisés.

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;

}

Vous pouvez consulter cet article MSDN pour plus d'informations sur les nouvelles fonctionnalités et améliorations de C # 6.