【发布时间】:2011-12-03 07:37:00
【问题描述】:
C# 是否具有类似于 Java 的静态导入的功能?
所以不要像
那样写代码FileHelper.ExtractSimpleFileName(file)
我会写
ExtractSimpleFileName(file)
编译器会知道我的意思是来自 FileHelper 的方法。
【问题讨论】:
标签: java c# .net static-import
C# 是否具有类似于 Java 的静态导入的功能?
所以不要像
那样写代码FileHelper.ExtractSimpleFileName(file)
我会写
ExtractSimpleFileName(file)
编译器会知道我的意思是来自 FileHelper 的方法。
【问题讨论】:
标签: java c# .net static-import
从 C# 6.0 开始,这是可能的:
using static FileHelper;
// in a member
ExtractSimpleFileName(file)
但是,以前的 C# 版本没有静态导入。
您可以使用该类型的别名来接近。
using FH = namespace.FileHelper;
// in a member
FH.ExtractSimpleFileName(file)
或者,将静态方法更改为类型上的extension method - 然后您可以将其称为:
var value = file.ExtractSimpleFileName();
【讨论】:
Roslyn 平台 supports Static import 下的 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 中的其他新功能,请参阅:New Language Features in 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# 编译器的 official documentation 将该功能列为“完成”
【讨论】:
不,C# 中不存在这样的功能。您需要指定静态方法所属的类,除非您已经在同一个类的方法中。
在 C# 中,虽然你有 extension methods 模仿这个。
【讨论】: