繁体   English   中英

快速引用静态方法

[英]Quickly reference static methods

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

例如,您有一个帮助器类:

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

然后您需要调用它:

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

是否可以调用DoWork(); 没有参考? 像这样:

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

只是为了简单起见。

不太完全,但是以下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();
        }
    }
}

否。Java具有这样的静态导入概念,但是C#没有。 (IMO,不知道实现所在位置的裸露DoWork()是不理想的。)

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

public void foo()
{
    DoWork();
}

即使foo()不是静态的,也可以从其中调用DoWork

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

使用using static指令引用静态类:( 在C#6中引入

using static HelperTools;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM