webentwicklung-frage-antwort-db.com.de

Wie verwende ich die C # 6-Funktion "Using static"?

Ich schaue mir einige der neuen Funktionen in C # 6 an, insbesondere "using static".

using static ist eine neue using-Klausel, mit der Sie statische Elemente von Typen direkt in den Gültigkeitsbereich importieren können.
(Ende des Blogposts)

Die Idee ist wie folgt, laut ein paar Tutorials, die ich gefunden habe,
Anstatt:

using System;

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

Sie können die wiederholte Console -Anweisung weglassen, indem Sie die neue C # 6-Funktion zur Verwendung statischer Klassen verwenden:

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

Dies scheint jedoch nicht für mich zu funktionieren. Bei der Anweisung using erhalte ich eine Fehlermeldung mit den Worten:

"A 'using namespace 'Direktive kann nur auf Namespaces angewendet werden; 'Console' ist ein Typ, kein Namespace. Betrachten Sie ein 'using static 'Direktive statt "

Ich verwende Visual Studio 2015 und habe die Build-Sprachversion auf "C # 6.0" eingestellt

Was gibt? Ist das Beispiel des msdn-Blogs falsch? Warum funktioniert das nicht?


Der Blog-Beitrag wurde jetzt aktualisiert, um die neuesten Aktualisierungen wiederzugeben. Hier ist jedoch ein Screenshot, falls der Blog ausfällt:

blog

110
Cerbrus

Es sieht so aus, als ob sich die Syntax seit dem Schreiben dieser Blog-Beiträge geringfügig geändert hat. Fügen Sie Ihrer include-Anweisung static hinzu, wie in der Fehlermeldung angegeben:

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

Dann wird Ihr Code kompiliert.


Beachten Sie, dass dies in C # 6.0 nur für Member funktioniert, die als static deklariert wurden.

Betrachten Sie zum Beispiel System.Math:

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

Bei using static System.Math Können Sie einfach Abs(); verwenden.
Sie müssten jedoch immer noch PI voranstellen, da es sich nicht um ein statisches Mitglied handelt: Math.PI;.

In C # 7.2 (und möglicherweise niedriger) sollte dies nicht der Fall sein. const Werte wie PI können ebenfalls verwendet werden.

160
Cerbrus

Das Schlüsselwort static in einer using -Anweisung importiert nur den angegebenen Typ (und seine verschachtelten Typen). Außerdem darf der Typname nicht mehr angegeben werden. Fügen Sie einfach statische Aufladung zu Ihrer Verwendung hinzu.

Hinweis: Verwenden Sie diese Funktion nur, wenn die beiden Klassen logisch eng miteinander verwandt sind, da sonst der Code nur schwer gelesen werden kann.

0
Tobias Brohl