55

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

所以而不是像写代码

FileHelper.ExtractSimpleFileName(file)

我可以写

ExtractSimpleFileName(file)

并且编译器会知道我的意思是来自 FileHelper 的方法。

4

4 回答 4

93

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

using static FileHelper;

// in a member
ExtractSimpleFileName(file)

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

您可以使用该类型的别名来接近。

using FH = namespace.FileHelper;

// in a member
FH.ExtractSimpleFileName(file)

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

var value = file.ExtractSimpleFileName();
于 2011-10-07T21:04:01.637 回答
13

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

在 C# 中,虽然你有模仿这种的扩展方法。

于 2011-10-07T21:03:25.073 回答
8

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

using static System.Console;

所以代码可能如下所示:

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

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

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

于 2015-04-23T18:38:54.340 回答
6

时间在流逝……看起来 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!");
    }
}

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

于 2014-07-08T14:26:03.483 回答