Как использовать функцию C#6 "Using static"?


Я смотрю на пару новые возможности в C# 6, в частности, "использовать статический".

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

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

using System;

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

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

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

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

"а 'using namespace' директива может быть применена только к пространствам имен;'Console' - Это тип, а не пространство имен. Рассмотрим''"

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

что это дает? Это пример в видеоролике неправильно? Почему это не работает?


сообщение в блоге было обновлено, чтобы отразить последние обновления, но вот скриншот на случай, если блог идет вниз:

2 97

2 ответа:

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

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

затем, ваш код будет компилироваться.


обратите внимание, что в C# 6.0, это будет работать только для членов заявлена как 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;.

в C# 7.2 (и, возможно, ниже), это не должно быть так,const значения PI можно использовать также.

The static сайта на using оператор будет импортировать только один, указанный тип (и это вложенные типы). Кроме того, вы больше не должны давать имя типа. Так что просто добавьте статику в свое использование.

Примечание: пожалуйста, используйте эту функцию только тогда, когда два класса логически тесно связаны, в противном случае это делает чтение кода довольно трудно.