【发布时间】:2013-04-26 01:02:19
【问题描述】:
我一直在深入阅读有关委托的内容,令人困惑的是,具有一种方法的委托可能与多播委托不同。但是,通过反射,您可以清楚地看到,即使只有一个方法,委托确实是从 MulticastDelegate 派生的,而不是立即从 Delegate 对象派生的。
class Program
{
public delegate void MyDelegate();
static void SomeMethod()
{
}
static void Main(string[] args)
{
MyDelegate del = null;
del = new MyDelegate(SomeMethod);
Console.WriteLine(del.GetType().BaseType.Name);
Console.ReadKey();
}
}
输出:MulticastDelegate
我意识到MulticastDelegate 包含Delegate 对象的调用列表。我想知道是否可以直接创建一个Delegate,除了调用GetInvocationList() 并单独提取Delegate 对象之外,这样做是否有任何好处。
【问题讨论】:
-
它在哪里“普遍教授”?我从没见过。
-
我阅读的每篇文章都将单个委托与多播委托区分开来,因为它们是不同的实体。但是,我看不出如何以简单的方式创建单个委托,并且所有委托都是多播的。
-
我读过的每一篇最近(如 2003 年之后)文章都从谈论单播代表开始,然后解释说它们都是真正的多播(实例MulticastDelegate),但为了简单起见,开始使用单播会很有帮助。如果您有任何真正被教导“具有一种方法的委托不是多播委托”的示例,您应该提供示例而不是笼统。
-
我很抱歉。我不考虑泛化。网络上充斥着无数的文章。几乎所有我遇到的仍然在使用单播和多播之间的这种区别,就好像您实际上是在创建单个委托一样。这是一个小的技术问题,但我想知道只是为了彻底。
-
这不是政治正确的问题。你列举一些具体的例子会有各种好处:我们可以确切地看到所说的内容,并希望通过邮件向作者发送更正。如果没有具体的例子,这个问题最好不要参考不正确的文章。