导入静态方法

如何从另一个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;using foo; 在顶部并调用foobar()作为foo.bar.foobar()它工作,尽管很冗长。 对此有任何解决方法吗?

这是已接受的答案,但请注意,正如下面的答案所述,现在可以在C#6中实现

你不能

静态方法需要按类设计。

为什么需要将静态方法包装到类中?

使用C#6.0,您可以。

C#6.0 允许静态导入(请参阅使用静态成员)

你将能够做到:

 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以来,静态导入function需要明确提及static关键字,如:

 using static System.Console; 

在适当的范围内声明Action Delegate变量,如下所示,并在以后使用它:

 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 foo; 

然后,您可以使用以下类型和方法访问它:

 bar.foo();