This question already has answers here:
Simple Delegate (delegate) vs. Multicast delegates
(6个答案)
5年前关闭。
我一直在深入阅读有关委托的内容,令人困惑的是,使用一种方法的委托可能与多播委托不同。但是,通过反射,您可以清楚地看到,即使只有一种方法,委托的确确实是从
输出:
我意识到
(6个答案)
5年前关闭。
我一直在深入阅读有关委托的内容,令人困惑的是,使用一种方法的委托可能与多播委托不同。但是,通过反射,您可以清楚地看到,即使只有一种方法,委托的确确实是从
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
对象之外。 最佳答案
并不是的。所有.NET委托均源自MulticastDelegate
。最初编写.NET时,单播和多播之间最初存在区别,但该区别在发布前已被删除。但是,基础类型没有合并为一个。
您不能直接在C#中从Delegate
派生。您可能可以使用原始IL,但是没有太多意义,因为MulticastDelegate
的运行方式像单播委托一样,可以实现所有意图和目的。
10-04 12:04