导入静态方法

时间:2012-12-28 06:06:34

标签: c# static-import

如何从另一个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(),那么它就会有效,尽管它很冗长。对此有任何解决方法吗?

4 个答案:

答案 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中使用

你不能

静态方法需要在设计类中。

Why do static methods need to be wrapped into a class?

答案 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();