2015-08-06 2 views
87

Я смотрю на пару new features in C# 6, в частности, "Использование статического".Как использовать функцию C# 6 «Использование статического»?

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

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

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“тип не пространство имен Рассмотрит„“using static директивы вместо этого. "

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

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

ответ

127

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

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;.

+3

У меня такая же проблема, но вместо этого с 'System.Math', в частности' Math.PI'. Когда я использую 'using static System.Math', методы, подобные' Sqrt() 'работают, но не постоянны, как' PI'. Я должен продолжать писать 'Math.PI' или код не компилируется. Мне любопытно, почему это не работает. Должен ли я задать новый вопрос? – skwear

+5

@skwear: это звучит как материал для нового вопроса, да. – Cerbrus

+1

В качестве быстрого ответа на вопрос @ skwear: _ «using static - это новый способ использования, который позволяет импортировать члены __static__ <...>». 'PI' не является _static_ членом класса' Math'. Это постоянный. Проще говоря: член должен быть объявлен как «статический». – Cerbrus

Смежные вопросы