21

如何从另一个 c# 源文件导入静态方法并在没有“点”的情况下使用它?

像 :

foo.cs

namespace foo
{
    public static class bar
    {
        public static void foobar()
        {
        }
    }
}

程序.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

4 回答 4

43

使用 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 发布以来,静态导入功能需要明确提及static关键字,例如:

using static System.Console;
于 2014-10-24T14:35:40.363 回答
8

这是公认的答案,但请注意,正如下面的答案所述,这在 C# 6 中现在是可能的

你不能

静态方法需要设计在一个类中..

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

于 2012-12-28T06:09:56.707 回答
1

如下在合适的范围内声明一个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();

这实际上是一个更好的方法。

于 2012-12-28T06:09:43.900 回答
0

要添加到这里的答案,重要的是要注意 C# 是一种非常类型化的语言。因此,除非该方法存在于您所在的类中,否则您将永远无法执行您正在寻找的事情。

但是,如果您添加使用:

using foo;

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

bar.foo();
于 2012-12-28T06:29:22.823 回答