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

时间:2015-08-06 09:46:26

标签: c# visual-studio-2015 static using c#-6.0

我正在看一些new features in C#6,具体来说, “使用静态”

  

使用静态是一种新的using子句,可以将类型的静态成员直接导入范围。
  (博客文章的底部)

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

using System;

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

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

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

然而,这似乎对我没有用。我在using声明中收到错误,说:

  

“A using namespace”指令只能应用于名称空间;“Console”类型不是名称空间。请考虑使用“using static”指令“< / em>的

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

是什么给出的? msdn博客的例子不正确吗?为什么这不起作用?

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

  

blog

2 个答案:

答案 0 :(得分:157)

自撰写博客文章以来,语法似乎略有变化。如错误消息所示,请将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值。

答案 1 :(得分:0)

static语句中的using关键字将仅导入一种指定的类型(及其嵌套类型)。此外,您不能再给出类型名称。因此只需在您的使用中添加静态内容即可。

注意:仅当两个类在逻辑上紧密相关时,才可以使用此功能,否则会使代码读取变得非常困难。