从静态方法c#调用非静态方法

Mou*_*Mou 4 c# oop

可能重复:
从静态方法c#调用非静态方法

我们可以从静态方法创建实例中调用非静态方法.码:

public class Foo
{
    public void Data1()
    {
    }

    public static void Data2()
    {
        Foo foo = new Foo();
        foo.Data1();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我听说可以在委托的帮助下从静态方法调用非静态方法.这是真的吗?如果是,那怎么样?请指导我提供示例代码.谢谢.

dle*_*lev 10

这是通过委托调用非静态方法的一种方法.请注意,这是一个两步过程,因为要调用非静态方法,您绝对需要该类的实例.我还要注意,几乎可以肯定有更好的方法来做你想做的事情,因为需要从静态方法调用非静态方法,尽管不想使用对象实例,这听起来像非静态方法应该是静态的.

public class MyClass
{
    private static Action NonStaticDelegate;

    public void NonStaticMethod()
    {
        Console.WriteLine("Non-Static!");
    }

    public static void CaptureDelegate()
    {
        MyClass temp = new MyClass();
        MyClass.NonStaticDelegate = new Action(temp.NonStaticMethod);
    }

    public static void RunNonStaticMethod()
    {
        if (MyClass.NonStaticDelegate != null)
        {
            // This will run the non-static method.
            //  Note that you still needed to create an instance beforehand
            MyClass.NonStaticDelegate();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)