c#中的静态导入

本文关键字:导入 静态 | 更新日期: 2023-09-27 18:10:54

c#有Java的静态导入功能吗?

所以不要写像

这样的代码
FileHelper.ExtractSimpleFileName(file)

我可以写

ExtractSimpleFileName(file)

和编译器会知道我是指FileHelper的方法

c#中的静态导入

从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();

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

在c#中有类似的扩展方法

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中的新语言特性

时间在流逝…看起来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#编译器的官方文档将该特性列为'done'

如果你正在使用。net 6+和c# 10+,你可以添加所有你想全局使用的命名空间,(包括静态的)在obj>globalusing .g.cs,你就可以使用这些命名空间的所有类,而不需要导入。下面是一些例子:

 global using global::System.Net.Http.Json;
 global using global::System.Threading;
 global using global::System.Threading.Tasks;
 global using static global::System.Console;