C# 快速引用静态方法

C# 快速引用静态方法,c#,class,methods,reference,shortcut,C#,Class,Methods,Reference,Shortcut,是否有可能在不引用其类的情况下调用方法 例如,您有一个助手类: class HelperTools { public static void DoWork() { /*...*/ } } 然后你需要称之为: class MainClass { public static void Main() { HelperTools.DoWork(); } } 是否可以调用DoWork()没有引用?像这样: public static void M

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

例如,您有一个助手类:

class HelperTools
{
    public static void DoWork()
    { /*...*/ }
}
然后你需要称之为:

class MainClass
{
    public static void Main()
    {
        HelperTools.DoWork();
    }
}
是否可以调用
DoWork()没有引用?像这样:

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

只是为了简单起见。

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

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

public void foo()
{
    DoWork();
}

您可以从内部调用
DoWork
,即使
foo()
不是静态的。

不完全是静态的,但这里有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();
        }
    }
}

几年后,但也许这会帮助其他人

使用
using static
指令引用静态类:()


为什么?这有什么实际用途?严肃的问题,我很好奇。有一些方法可以做到这一点(例如,调用静态方法的私有方法,使其成为
class MainClass:HelperTools
,动态调用),但对于熟悉C#中通常如何做的人来说,这是非常违反直觉的。普通的C#方法是简单地调用
HelperTools.DoWork()myObj.MyExtensionMethod()
@SimonWhitehead Simplicity。注意“快捷方式”标签-我只是在寻找调用方法的更快方法。关闭,但这个答案不太准确;第一句是错的。它应该是“在不引用类名的情况下调用DoWork的唯一地方是在DoWork的范围内”。由于DoWork是内部类的公共方法,因此可以在派生类的主体中使用其非限定名称。是的,这是理想的。时间就是金钱,并不是所有的课程都很复杂,充满了大量的课程用途。
using static HelperTools;

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

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