Comment utiliser la fonction C # 6 «Using static»?

Je regarde quelques-unes des nouvelles fonctionnalités de C # 6, en particulier, “utiliser statique” .

using static est un nouveau type de clause using qui vous permet d’importer des membres statiques de types directement dans la scope.
(Bas de l’article de blog)

L’idée est la suivante, selon quelques tutoriels que j’ai trouvés,
Au lieu de:

using System; class Program { static void Main() { Console.WriteLine("Hello world!"); Console.WriteLine("Another message"); } } 

Vous pouvez omettre l’instruction Console répétée, en utilisant la nouvelle fonctionnalité C # 6 de l’utilisation des classes statiques:

 using System.Console; // ^ `.Console` added. class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } // ^ `Console.` removed. } 

Cependant, cela ne semble pas fonctionner pour moi. Je reçois une erreur sur la déclaration d’ using disant:

“Une directive ‘ using namespace ‘ ne peut être appliquée qu’aux espaces de noms; ‘ Console ‘ est un type et non un espace de noms. Considérons plutôt une directive ‘ using static ‘”

J’utilise Visual Studio 2015 et la version du langage de construction est définie sur “C # 6.0”

Ce qui donne? L’exemple du blog msdn est-il incorrect? Pourquoi cela ne marche pas?


L’article du blog a été mis à jour pour refléter les dernières mises à jour, mais voici une capture d’écran au cas où le blog serait en panne:

Blog

Il semble que la syntaxe ait légèrement changé depuis que ces articles ont été écrits. Comme le message d’erreur le suggère, ajoutez static à votre instruction include:

 using static System.Console; // ^ class Program { static void Main() { WriteLine("Hello world!"); WriteLine("Another message"); } } 

Ensuite, votre code sera compilé.


Notez que, dans C # 6.0, cela ne fonctionnera que pour les membres déclarés static .

Par exemple, considérez System.Math :

 public static class Math { public const double PI = 3.1415926535897931; public static double Abs(double value); //  } 

Lorsque vous using static System.Math , vous pouvez simplement utiliser Abs(); .
Cependant, vous devrez toujours préfixer PI car ce n’est pas un membre statique: Math.PI; .

Dans C # 7.2 (et peut-être moins), cela ne devrait pas être le cas, des valeurs const comme PI peuvent également être utilisées.

Le mot-clé static sur une instruction using importera uniquement le type spécifié (et ses types nesteds). De plus, vous ne devez plus donner le nom du type. Donc, ajoutez simplement statique à votre utilisation.

Remarque: Veuillez utiliser cette fonctionnalité uniquement lorsque les deux classes sont étroitement liées logiquement, sinon cela rend la lecture du code assez difficile.