Jak korzystać z funkcji C # 6 "Using static"?

Przeglądam kilka nowych funkcji w C # 6, a konkretnie, "używanie statycznych" .

using static jest nowym rodzajem klauzuli using, która pozwala importować statyczne elementy typów bezpośrednio do zakresu.
(na dole bloga)

Według kilku samouczków, które znalazłem, pomysł wygląda następująco]} Zamiast:
using System;

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

Można pominąć powtórzone Console stwierdzenie, używając nowego C# 6 funkcja używania klas statycznych:

using System.Console;
//           ^ `.Console` added.
class Program 
{ 
    static void Main() 
    { 
        WriteLine("Hello world!"); 
        WriteLine("Another message"); 
    } // ^ `Console.` removed.
}
Jednak to chyba nie działa. Dostaję błąd w stwierdzeniu using, mówiącym:

"dyrektywa' using namespace 'może być stosowana tylko do przestrzeni nazw;' Console ' jest typem, a nie przestrzenią nazw. Rozważmy dyrektywę "using static "zamiast"

Używam visual studio 2015 i mam wersję językową kompilacji ustawioną na "C# 6.0"

Co się dzieje? Jest przykładem bloga msdn źle? Dlaczego to nie działa?

Wpis na blogu został zaktualizowany, aby odzwierciedlać najnowsze aktualizacje, ale oto zrzut ekranu na wypadek, gdyby blog upadł:

blog

Author: Cerbrus, 2015-08-06

2 answers

Wygląda na to, że składnia nieco się zmieniła od czasu napisania tych wpisów na blogu. Jak sugeruje komunikat o błędzie, dodaj static do instrukcji include:

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

Wtedy twój Kod się skompiluje.


Zauważ, że w C # 6.0 będzie to działać tylko dla członków zadeklarowanych jako static.

Na przykład rozważmy System.Math:

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

Kiedy using static System.Math, możesz po prostu użyć Abs();.
Jednak nadal będziesz musiał przedrostek PI, ponieważ nie jest on członkiem statycznym: Math.PI;.

W C# 7.2 (i może niżej) nie powinno tak być, const wartości takie jak PI mogą być również używane.

 142
Author: Cerbrus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 11:34:33

Słowo kluczowe static w instrukcji using zaimportuje tylko jeden, określony typ (i typy zagnieżdżone). Ponadto nie wolno już podawać nazwy typu. Więc po prostu dodaj statyczne do korzystania.

Uwaga: używaj tej funkcji tylko wtedy, gdy te dwie klasy są logicznie blisko ze sobą powiązane, w przeciwnym razie czytanie kodu jest dość trudne.

 0
Author: Tobias Brohl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 11:51:42