c#中的静态导入
本文关键字:导入 静态 | 更新日期: 2023-09-27 18:10:54
c#有Java的静态导入功能吗?
所以不要写像
这样的代码FileHelper.ExtractSimpleFileName(file)
我可以写
ExtractSimpleFileName(file)
和编译器会知道我是指FileHelper的方法
从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;