【问题标题】:Does "delegate" mean a type or an object?“委托”是指类型还是对象?
【发布时间】:2010-06-21 22:17:11
【问题描述】:

从 MSDN 阅读: “委托是一种引用方法的类型。一旦为委托分配了一个方法,它的行为就与该方法完全一样。”

那么“委托”是指类型还是对象?!

...不能两者兼而有之。在我看来,这个词有两种不同的含义:

  1. 一种包含对某个指定签名的方法的引用的类型,
  2. 该类型的对象,实际上可以像方法一样调用。

我更喜欢更精确的词汇,并在第一种情况下使用“委托类型”。我最近阅读了很多关于事件和代表的内容,这种模棱两可让我多次感到困惑。

MSDN 中“delegate”一词的其他一些用法:

  • “仅当事件生成事件数据时才需要自定义事件委托”
  • “委托声明定义了一个派生自 System.Delegate 类的类”

MSDN中“delegate”这个词在第二个含义中的一些其他用法:

  • “指定在某些事件发生时将被调用的委托”
  • “委托是指方法的对象。它们有时被描述为类型安全的 函数指针”

你怎么看?为什么微软的人会引入这种歧义?我是唯一一个在用同一个词引用不同概念时遇到概念问题的人吗?

【问题讨论】:

    标签: .net delegates msdn


    【解决方案1】:

    文本使用delegate这两个方式;作为类型和类型的实例。

    它应该说“委托type是一种引用方法的类型。一旦委托instance被分配了一个方法,它的行为就和那个方法完全一样。”

    【讨论】:

    • 请注意,C# 中的 delegate 关键字同样含糊:delegate xyz Xyz() 表示委托typedelegate() { ... } 表示委托instance.
    • @Ruben 我迟到了,但这种模棱两可的情况不是每个类型名称/构造函数名称对的情况吗?
    • @PeterSchneider,我认为原始文本的真正问题是表述一旦为委托分配了方法; 从方法(引用)创建委托(实例)后,这是一种非常奇怪的说法。使用通常在不同上下文中使用的“分配”一词(x = y,而不是 x = new X(y),此处忽略 C#,它明确允许委托的两种语法),结合 xyz 类型与 xyz 实例的歧义, 让不熟悉原文试图解释的概念的人非常困惑。
    • delegate keyword 突然将其解释从类型声明更改为实例化:您必须知道delegate { ... } 的真正含义是new InferredDelegateType(generatedMethod);其他关键字没有这样的正交用途。
    • @Ruben 感谢您的想法,尤其是 delegate { ... } 实际上定义了推断(匿名)类型的实例。我必须考虑一下——我的评论纯粹是正式的,而且我对一般代表并不完全熟悉(而不是对老式 C 函数指针感到熟悉)。这种不适的一部分可能确实是基于术语。
    【解决方案2】:

    委托类型指的是签名,而不是特定方法委托实例,如果已分配,可能包含一个或多个方法引用。

    所以委托类型是:

    delegate void D();
    

    委托实例是:

    D d;
    

    委托实例分配可能是:

    d += new D (Method);
    

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      相关资源
      最近更新 更多