【问题标题】:Do we work with delegates or instances of delegates?我们是否与委托或委托实例一起工作?
【发布时间】:2011-06-23 12:48:21
【问题描述】:

只是术语......据我了解,委托是类型,需要有它的实例。因此,我没有将方法分配给委托,而是分配给该委托的实例,对吗?好像在 MSDN 上他们是草率的或者我理解的不是很好。

【问题讨论】:

    标签: c# delegates terminology


    【解决方案1】:

    这很接近正确。您有一个不可变的委托实例。您可以添加与委托类型具有相同签名的方法,从而创建新的委托实例。因此,例如使用委托类型Func<int>

    Func<int> f;
    

    一个实例还不存在。

    f = () => 5;
    

    现在我们有了它的一个实例。

    f += () => 6;
    

    旧实例消失了,现在我们有了一个新实例。但是当你调用f() 时,这两个方法都会被执行。返回值将是添加到委托实例的最后一个值。

    【讨论】:

      【解决方案2】:

      嗯,是的,也不是。最常使用的术语“委托”是指“方法引用”,您可以将其称为“委托实例”。从逻辑上讲,这个实例就是“委托”;它指的是调用者用来执行一些他们不能或不应该自己做的任务的实际方法。

      当您定义public delegate void MyDelegate(); 时,您正在定义一个“委托类型”,它说明了在这种情况下可以用作委托的方法的正确签名。这是类和对象之间的区别;类是模板,对象是符合模板的实例。

      【讨论】:

        【解决方案3】:

        “委托”一词用于指代两种不同的事物:

        1. 定义方法签名和返回类型的静态类,并包含一些“粘合”逻辑。
        2. 具有 Invoke 方法的对象实例,其函数签名与上述静态类的签名匹配。

        不幸的是,我不知道任何标准命名法来区分它们,但也许有人可能会使用术语“委托签名”和“ActionDelegate”或“FunctionDelegate”。

        顺便说一下,术语“对象”、“引用”和“析构函数”会引起类似的混淆。我更喜欢使用短语“对象 ID”来指代指向“对象实例”的变量,将术语“引用”专门用于传递引用参数语义,并完全避免使用“析构函数”来支持“终结器” ”和“处理器”。

        【讨论】:

          猜你喜欢
          • 2011-01-12
          • 1970-01-01
          • 2011-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多