Microsoft nous tease une future version 8 (non encore livrée donc) de C# qui promet !
Entre l’asynchrone amélioré, les interfaces revisitées (wahoo !), et la création d’objets de même type en une seule ligne, ça promet !
Asynchrone amélioré
Nous avions déjà async / await pour créer des échanges asynchrones non bloquants.
Et si vous l’avez déjà utilisé, vous savez la facilité de mise en place avec C# actuellement.
Or, comment faire pour attendre un ensemble d’actions de manière continue, sans attendre chaque action asynchrone ?
En somme comment passer de de :
var result = await UneMethodeAsync();
var result2 = await UneMethodeAsync2();
var result3 = await UneMethodeAsync3();
Nous pourrons faire :
async IAsyncEnumerable<int> UneMethodeCompleteAsync()
{
await foreach (var result in UneMethodeAsync())
{
if (result > 20) yield return result;
}
}
Oui, vous avez bien vu : on a un await sur un foreach, et un IAsyncEnumerable !
Interface revisitée : vers la fusion avec les classes abstraites ?
Prenons le cas suivant : vous avez développé cette interface :
public interface IShip
{
int FlyAway();
}
Et vous avez un premier vaisseau qui l’implémente :
public class XWing : IShip
{
public int FlyAway()
{
// I Can fly !
}
}
OK, et quelques mois plus tard, vous avez non pas une mais trois, voire quatre, voire une dizaine de classes qui implémentent cette interface.
Or, non, voilà que vous devez ajouter une méthode à votre interface !
Et bien c’est parti …vous devez ajouter l’implémentation dans chaque classe liée … en un mot : c’est lourd !
C# 8 va nous proposer la possibilité de mettre une implémentation par défaut d’une méthode, si elle n’est pas implémentée !
En somme, ça va donner ça (en ajoutant la méthode : ShootThemUp()) :
public interface IShip
{
int FlyAway();
void ShootThemUp() => Console.WriteLine(“I shoot the sheriff”);
}
Créer plusieurs objets de même type, sur une même ligne
Tiens une envie de créer un tableau de plusieurs Wookie ?
Actuellement, vous deviez faire ça :
Wookie[] list = {new Wookie(“chewie”), new Wookie(“Lumpawarrump”)};
Vu que c’est le même type à chaque fois, dans la version 8 de C#, nous pourrons omettre le type, le compilateur le détectera tout seul !
Wookie[] list = {new (“chewie”), new (“Lumpawarrump”)};
Et d’autres fonctionnalités
Je vous laisse aller voir l’article en détaillé sur le blog dotnet.