c#中的静态导入

IAd*_*ter 50 .net c# java static-import

C#是否具有Java的静态导入功能?

所以不要像编写代码那样代码

FileHelper.ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)

我可以写

ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)

和编译器会知道我的意思是来自FileHelper的方法.

Ode*_*ded 83

从C#6.0开始,这是可能的:

using static FileHelper;

// in a member
ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)

但是,以前版本的C#没有静态导入.

您可以使用该类型的别名来关闭.

using FH = namespace.FileHelper;

// in a member
FH.ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)

或者,将静态方法更改为类型上的扩展方法 - 然后您可以将其称为:

var value = file.ExtractSimpleFileName();
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 12

不,C#中不存在这样的功能.您需要指定静态方法所属的类,除非您已经在同一个类的方法中.

在C#中虽然你有扩展方法,这种方式模仿这个.


Mic*_*out 5

时间推移......看起来C#可能会在下一个版本中获得静态导入,请参阅http://msdn.microsoft.com/en-us/magazine/dn683793.aspx进行预览.

using System;
using System.Console; // using the Console class here

public class Program
{
    public static void Main()
    {
        // Console.WriteLine is called here
        WriteLine("Hello world!");
    }
}
Run Code Online (Sandbox Code Playgroud)

'Roslyn'C#编译器的官方文档将该功能列为'完成'


Hab*_*bib 5

Roslyn平台下的C#6.0 支持静态导入。它需要如下语句:

using static System.Console;
Run Code Online (Sandbox Code Playgroud)

因此代码可能如下所示:

using static System.Console;
namespace TestApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            WriteLine("My test message");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

C#6.0的较早计划版本具有不带 static关键字的静态导入。

有关C#6.0中的其他新功能,请参见:C#6中的新语言功能