web-dev-qa-db-fra.com

Comment utiliser la fonctionnalité "Utilisation de statique" de C # 6?

Je suis en train de regarder quelques-uns des nouvelles fonctionnalités de C # 6, plus précisément, "en utilisant static" .

using static est un nouveau type de clause using qui permet d'importer des membres statiques de types directement dans la portée.
(Bas de l'article de blog)

L'idée est la suivante, d'après 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, à l'aide de la nouvelle fonctionnalité C # 6 d'utilisation de 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 l'instruction using en 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érez 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 ça ne marche pas?


Le billet de blog a été mis à jour pour refléter les dernières mises à jour, mais voici une capture d'écran au cas où le blog tomberait:

blog

110
Cerbrus

Il semble que la syntaxe ait légèrement changé depuis la publication de ces articles. 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 qu'en C # 6.0, cela ne fonctionnera que pour les membres déclarés comme static.

Par exemple, considérons System.Math:

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

Quand using static System.Math, vous pouvez simplement utiliser Abs();.
Cependant, vous devez toujours préfixer PI car il ne s'agit pas d'un membre statique: Math.PI;.

En C # 7.2 (et peut-être inférieur), cela ne devrait pas être le cas, les valeurs const telles que PI peuvent également être utilisées.

160
Cerbrus

Le mot clé static d'une instruction using importera uniquement le type spécifié (et ses types imbriqués). De plus, vous ne devez plus donner le nom du type. Il suffit donc d’ajouter de la statique à votre utilisation.

Remarque: N'utilisez cette fonctionnalité que lorsque les deux classes sont liées de manière logique, sinon la lecture du code devient difficile.

0
Tobias Brohl