是否可以使用委托来调用类的方法而不实例化它?

时间:2014-02-24 05:14:44

标签: c# delegates

一位采访者问我,他有一个沉重的班级,有很多方法。 到目前为止,他只需要一种方法。

他问我C#中的Delegates是否可以帮助我调用该方法而不实例化该类?

他说是的,代表们可以这样帮助我们。

我用Google搜索了一下。我尝试在我的VS上运行它,但我想我需要初始化该类。

看看这个片段 -

public class HomeController : Controller
{

    public ActionResult test()
    {            
        NumberChanger nc1 = new NumberChanger( /*what to do here!
                                            can i call sum method of class abc*/);

        return View();
    }
}

public delegate int NumberChanger(int n, int m);

public class abc
{
    int a;
    int b;

    public int sum(int a, int b) {
        return a + b;
    }

}

2 个答案:

答案 0 :(得分:0)

如果你需要使用非静态方法,可能你应该使用新的NumberChanger(新的abc()。sum)
试一试

答案 1 :(得分:0)

您总是需要至少一个实例来调用实例方法。

但是如果你想避免创建大量重物,你可以使用这样的技巧:

class TestClass
{
    private static TestClass DummyInstance;

    public static Action GetShowAsDelegate()
    {
        DummyInstance = DummyInstance ?? new TestClass();
        return (DummyInstance.Show);
    }

    public void Show()
    {
        Console.WriteLine("It works!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var show = TestClass.GetShowAsDelegate();
        show();
    }
}

您的类存储自身的私有静态实例,当调用者请求Show()的委托版本时,该实例将被实例化。然后它使用该实例,因此您不需要每次都在外部创建一个实例。第一次调用后,任何人都可以通过获取委托来运行Show方法,而无需再创建任何实例。