导入一个静态方法

本文关键字:一个 静态方法 导入 | 更新日期: 2023-09-27 17:49:39

如何从另一个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(),它可以工作,尽管很冗长。有什么解决办法吗?

导入一个静态方法

与c# 6.0。

c# 6.0允许静态导入(参见使用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;

这是被接受的答案,但请注意,正如下面的答案所述,这现在在c# 6中是可能的

你不能

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

为什么静态方法需要包装成一个类?

在合适的范围内声明一个动作委托变量,如下所示,并在以后使用:

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:

using foo;

你可以使用类型和方法来访问它,像这样:

bar.foo();