如何从另一个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()
,那么它就会有效,尽管它很冗长。对此有任何解决方法吗?
答案 0 :(得分:30)
您可以使用C#6.0。
C#6.0 allows static import (See using 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;
答案 1 :(得分:8)
这是已接受的答案,但请注意,正如下面的答案所述,现在可以在C#6中使用
你不能
静态方法需要在设计类中。
答案 2 :(得分:1)
在适当的范围内声明Action Delegate变量,如下所示,稍后再使用:
Action foobar = () => foo.bar.foobar();
甚至更容易
Action foobar = foo.bar.foobar;
我还要注意Extension Methods (C# Programming Guide)。如果您正在使用带参数的方法,那么通常很舒适:
public static class bar
{
public static void foobar(this string value)
{
}
}
并利用它:
string s = "some value";
s.foobar();
这实际上是一种更好的方法。
答案 3 :(得分:0)
要添加到此处已有的答案,请务必注意C#是一种非常类型的语言。因此,除非您所在的课程中存在该方法,否则您将永远无法做出您正在寻找的内容。
但是,如果你添加使用:
using foo;
然后您可以使用以下类型和方法访问它:
bar.foo();