如何使用C#6"使用静态"功能?

Cer*_*rus 113 c# static using c#-6.0 visual-studio-2015

我正在研究 C#6 中的几个新功能,特别是 "使用静态".

using static是一种新的using子句,它允许您将类型的静态成员直接导入范围.
(博客文章的底部)

根据我发现的几个教程,这个想法如下,
而不是:

using System;

class Program 
{ 
    static void Main() 
    { 
        Console.WriteLine("Hello world!"); 
        Console.WriteLine("Another message"); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

您可以Console使用使用静态类的新C#6功能省略重复的语句:

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

但是,这似乎对我没有用.我在using声明中收到错误,说:

"A' using namespace'指令只能应用于名称空间;' Console'是一种类型而不是名称空间.请考虑使用' using static'指令"

我正在使用visual studio 2015,我将构建语言版本设置为"C#6.0"

是什么赋予了?msdn博客的例子不正确吗?为什么这不起作用?


该博客文章现已更新,以反映最新的更新,但这是一个截图,以防博客发生故障:

博客

Cer*_*rus 165

自从撰写这些博客文章以来,语法似乎略有变化.如错误消息所示,添加static到include语句:

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

然后,您的代码将编译.


请注意,在C#6.0中,这仅适用于声明为的成员static.

例如,考虑System.Math:

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

什么时候using static System.Math,你可以使用Abs();.
但是,你仍然需要加前缀,PI因为它不是静态成员:Math.PI;.

在C#7.2(可能更低)中,情况不应该是这样,也可以使用const像这样的值PI.

  • @skwear:这听起来像是一个新问题的材料,是的. (5认同)
  • 我遇到了类似的问题,而是使用`System.Math`,特别是`Math.PI`.当我使用`using static System.Math`时,像`Sqrt()`这样的方法可以工作但不像`PI`这样的常量.我必须继续编写`Math.PI`或代码不编译.我很好奇为什么这不起作用.我应该为此提交一个新问题吗? (3认同)
  • 听起来像是一个新语法的机会,如:`using const System.Math;`:) (3认同)
  • 作为对 @skwear 问题的快速回答:_“using static 是一种新型的 using 子句,可让您导入 __static__ 成员 &lt;...&gt;”_。`PI` 不是 `Math` 类的静态成员。这是一个常数。简而言之:该成员必须声明为“static”。 (2认同)