如何从另一个c#源文件导入静态方法并使用它而不带"点"?
:
foo.cs
namespace foo
{
public static class bar
{
public static void foobar()
{
}
}
}
Program.cs
using foo.bar.foobar; // <= can't!
namespace Program
{
class Program
{
static void Main(string[] args)
{
foobar();
}
}
}
我不能只写foobar();
,但如果我把using foo;
写在上面,把foobar()
称为foo.bar.foobar()
,它可以工作,尽管很冗长。有什么解决办法吗?
与c# 6.0。
c# 6.0允许静态导入(参见使用static Member)你将能够做:
using static foo.bar;
然后在你的Main
方法中你可以这样做:
static void Main(string[] args)
{
foobar();
}
你可以对System.Console
做同样的事情,如:
using System;
using static System.Console;
namespace SomeTestApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Test Message");
WriteLine("Test Message with Class name");
}
}
}
编辑:自2015年1月Visual Studio 2015 CTP发布以来,静态导入功能需要明确提及static
关键字,如:
using static System.Console;
这是被接受的答案,但请注意,正如下面的答案所述,这现在在c# 6中是可能的
你不能
静态方法需要被设计在类中。
为什么静态方法需要包装成一个类?
在合适的范围内声明一个动作委托变量,如下所示,并在以后使用:
Action foobar = () => foo.bar.foobar();
或者更简单的
Action foobar = foo.bar.foobar;
我还将注意扩展方法(c#编程指南)。如果你有带参数的方法,通常使用:
是非常舒适的public static class bar
{
public static void foobar(this string value)
{
}
}
并加以利用:
string s = "some value";
s.foobar();
要补充这里已经给出的答案,重要的是要注意c#是一种非常类型的语言。因此,除非该方法存在于您所在的类中,否则您永远无法执行您正在寻找的操作。
但是,如果你加上using:
using foo;
你可以使用类型和方法来访问它,像这样:
bar.foo();