导入静态方法
如何从另一个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();