首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以使用委托来调用类的方法而不实例化它吗?

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

Stack Overflow用户
提问于 2014-02-24 13:14:44
回答 2查看 904关注 0票数 3

一位面试官问我,他有一个很重的类,有很多方法。到目前为止,他只需要有一种方法。

他问我C#中的委托是否可以帮助我在不实例化类的情况下调用该方法?

他说,是的,代表们可以通过这种方式帮助我们。

我用谷歌搜索过了。我试着在我的VS上运行它,但我想我需要初始化这个类。

看一下这段代码-

代码语言:javascript
运行
复制
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;
    }

}
EN

回答 2

Stack Overflow用户

发布于 2014-02-24 13:18:51

如果需要使用非静态方法,可能应该使用新NumberChanger(new abc().sum)

试一试

票数 0
EN

Stack Overflow用户

发布于 2014-02-24 13:36:12

您始终需要至少一个实例才能调用实例方法。

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

代码语言:javascript
运行
复制
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方法,而不需要创建更多的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21979394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档