【问题标题】:Whats is the difference between nested method call and delegates?嵌套方法调用和委托有什么区别?
【发布时间】:2012-06-27 12:48:07
【问题描述】:

考虑以下:

第一种方法:

public void f3()
{
f2();
f1();
}

还有这个……

第二种方法:

    class Sample
{
    public delegate void MyDelegate(string s);
    MyDelegate obj;

    public Sample()
    {
        obj += new MyDelegate(input);
        obj+=new MyDelegate(something);
        obj += new MyDelegate(someStaticMethod);
    }
}

当我调用 f3() 时,它会调用其中列出的函数......当我调用委托时也会发生同样的情况......所以当我可以使用第一种方法时,委托处理某些事件的用途是什么...... . 第一种方法也封装了方法调用..

【问题讨论】:

  • 如果您使用委托,您可以将工作委托给其他人。您的用户现在可以提供自定义实现,而不是硬编码到那里的任何功能。
  • 除了用法......两种方式都相似吗?我的意思是方法调用的方式是相同的.. ryt?

标签: c# function c#-4.0 delegates


【解决方案1】:

在委托的情况下,不指定附加函数的调用顺序。

此外,即使在运行时,您也可以从其他对象附加任意数量的函数,而不仅仅是第一种方法中的硬编码函数。委托有更广泛的用途。

【讨论】:

  • 另外,调试时堆栈跟踪应该更容易阅读。
  • +1 这是一个很好的答案。我还想提一下,委托是对方法的引用。您只需要在编译时知道签名,而在 OP 1st 方法中,您需要确切知道要调用哪些方法。
  • 如果您有必须按指定顺序运行的函数,那么第一种方法是正确的。否则它们在概念上是相同的,但第二个在它可以做的事情上更灵活。
  • Mike Bantegui:如果第一种方法添加了太多方法,是否也会导致堆栈溢出异常......而委托永远不会这样做?
  • @Sana.91 是的,如果你在同一个类中调用一个方法。委托支持将多个调用绑定到单个委托 (example)。他们还支持方差see this post for examples。委托比直接方法调用更强大。
【解决方案2】:

第一种方法是静态的。委托方法允许您或调用者确定稍后调用什么。

【讨论】:

  • 我会小心使用 static 一词,以免与关键字 static 混淆。 :p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 1970-01-01
  • 2011-07-16
  • 2011-10-12
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多