快速参考静态方法

时间:2013-05-13 23:46:27

标签: c# class methods reference shortcut

是否有可能在没有引用其类的情况下调用方法?

例如,你有一个助手类:

class HelperTools
{
    public static void DoWork()
    { /*...*/ }
}

然后你需要打电话给它:

class MainClass
{
    public static void Main()
    {
        HelperTools.DoWork();
    }
}

是否可以在没有参考的情况下致电DoWork();?像这样:

public static void Main()
{
    DoWork();
}

为了简单起见。

4 个答案:

答案 0 :(得分:6)

不完全,但这里有5种模式可以让你接近:

namespace My.Namespace
{
    using H = MyHelperClass;

    public class MyHelperClass
    {
        public static void HelperFunc1()
        {
            Console.WriteLine("Here's your help!");
        }
    }

    public class MyHelperClass2
    {
        public static void HelperFunc4()
        {
            Console.WriteLine("Here's your help!");
        }
    }

    public interface IHelper{ }

    public static class HelperExtensions
    {
        public static void HelperFunc3(this IHelper self)
        {
            Console.WriteLine("Here's your help!");
        }
    }

    public class MyClass : MyHelperClass2, IHelper
    {
        private static readonly Action HelperFunc2 = MyHelperClass.HelperFunc1;

        private static void HelperFunc5() 
        {
            Console.WriteLine("Here's your help!");
        }

        public void MyFunction()
        {
            //Method 1 use an alias to make your helper class name shorter
            H.HelperFunc1();
            //Method 2 use a class property
            HelperFunc2();
            //Method 3 extend an interface that has extension methods.
            //Note: you'll have to use the this keyword when calling extension
            this.HelperFunc3();
            //Method 4 you have access to methods on classes that you extend.
            HelperFunc4();
            //Method 5 put the helper method in your class
            HelperFunc5();
        }
    }
}

答案 1 :(得分:3)

没有。 Java有像这样导入静态的概念,但C#没有。 (IMO,一个裸体DoWork(),没有任何关于实现所在位置的线索是不理想的。)

答案 2 :(得分:0)

唯一可以在不引用类名的情况下调用DoWork的地方就在类本身内。例如,如果您向HelperTools添加非静态方法:

public void foo()
{
    DoWork();
}

您可以在其中调用DoWork,即使foo()不是静态的。

答案 3 :(得分:0)

晚了几年,但这也许会帮助别人...

使用using static指令引用静态类:(introduced in C# 6

using static HelperTools;

class MainClass
{
    public static void Main()
    {
        DoWork();
    }
}

---------------- HelperTools.cs--------------------
class HelperTools
{
    public static void DoWork()
    { /*...*/ }
}