Как использовать функцию С# 6 "Использование статического"?

Я смотрю на пару новых функций в С# 6, в частности, "using static".

с использованием static - это новый вид использования, который позволяет импортировать статические элементы типов непосредственно в область. (Нижняя часть сообщения в блоге)

Идея заключается в следующем, в соответствии с несколькими учебниками, которые я нашел,
Вместо:

using System;

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

Вы можете опустить повторный оператор Console, используя новую функцию С# 6 для использования статических классов:

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

Однако, похоже, это не работает для меня. Я получаю сообщение об ошибке в using, говоря:

"Директива" using namespace "может применяться только к пространствам имен," Console "- это тип, а не пространство имен. Вместо этого следует использовать директиву" using static "

Я использую визуальную студию 2015, и у меня есть версия языка сборки, установленная на "С# 6.0"

Что дает? Неверный пример блога msdn? Почему это не работает?

Ответ 1

Похоже, что синтаксис слегка изменился, поскольку эти записи в блоге были написаны. Как следует из сообщения об ошибке, добавьте static в оператор include:

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

Затем ваш код будет скомпилирован.


Обратите внимание, что это будет работать только для членов, объявленных как static.

Например, рассмотрим System.Math:

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

Когда using static System.Math, вы можете просто использовать Abs();.
Однако вам все равно придется префикс PI, потому что он не является статическим членом: Math.PI;.