我已经深入阅读了一些关于代理的内容,一个方法的委托可能与多播委托不同,这让人感到困惑.但是,通过反射,你可以清楚地看到,即使只有一个方法,委托确实是从一个对象派生出来的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();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:MulticastDelegate
我意识到a MulticastDelegate包含一个Delegate对象的调用列表.我想知道是否有可能Delegate直接创建单个,如果这样做有任何好处,除了单独调用GetInvocationList()和提取Delegate对象.
并不是的.所有.NET代理都派生自MulticastDelegate.首次编写.NET时,单个和多播之间最初存在差异,但在发布之前已将此区别删除.但是,基础类型没有合并为一个.
你不能Delegate直接从C#派生.你可能能够在原始的IL中,但并没有太多的意义,因为MulticastDelegate像所有意图和目的的单一代表一样操作.