一位面试官问我,他有一个很重的类,有很多方法。到目前为止,他只需要有一种方法。
他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法?
他说,是的,代表们可以通过这种方式帮助我们。
我用谷歌搜索过了。我试着在我的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;
    }
}发布于 2014-02-24 13:18:51
如果需要使用非静态方法,可能应该使用新NumberChanger(new abc().sum)
试一试
发布于 2014-02-24 13:36:12
您始终需要至少一个实例才能调用实例方法。
但是如果你想避免创建大量的重物,你可以使用这样的技巧:
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方法,而不需要创建更多的实例。
https://stackoverflow.com/questions/21979394
复制相似问题