好吧,我知道标题很混乱。那么让我通过一个例子来解释我的意思:
(我从书中得到了我正在阅读的例子,这是" Pro C#with .NET和.NET Core)
public void RegisterWithCarEngine(CarEngineHandler methodToCall)
{
if (listOfHandlers == null)
listOfHandlers = methodToCall;
else
listOfHandlers = Delegate.Combine(listOfHandlers, methodToCall) as CarEngineHandler;
}
listOfHandlers
是委托CarEngineHandler
的一个实例。
我的问题具体是关于这一行:
listOfHandlers = Delegate.Combine(listOfHandlers, methodToCall) as CarEngineHandler;
你在这里看到我正在调用静态方法Combine()
。而且你看到我将它投射到CarEngineHandler
。因此,此方法返回被视为CarEngineHandler
的{{1}}实例。
但是,这让我很困惑。当MSDN没有说出来时,我怎么知道它返回Delegate
的实例?
所有MSDN says about it都是这样的:
返回值
输入:System.Delegate
具有调用列表的新委托,该列表连接CarEngineHandler
数组中委托的调用列表。如果delegates
为null
,delegates
包含零元素,或null
中的每个条目均为delegates
,则返回delegates
。
答案 0 :(得分:4)
你完全正确,这是应该记录的事情。所有代表都必须属于同一类型(如#34; Exceptions"中所记载的那样)这一事实暗示了这一点,但实际上并没有做出任何承诺。它还需要" Combine对于创建每次事件发生时调用多个方法的事件处理程序非常有用。"但这实际上并没有承诺任何事情。
不幸的是,这只是其中一个案例,你可以从MS的事实中看出,Delegate.Combine
的行为方式表明它不会发生变化。