Tag: multicastdelegate

使用MulticastDelegate作为参数,同时避免使用DynamicInvoke

我有一个MulticastDelegate ,可以引用具有相同签名的许多(遗留)代理之一。 例如: public delegate void ObjectCreated(object sender, EventArgs args); public delegate void ObjectDeleted(object sender, EventArgs args); //… 然后,这些代表用于定义事件: public event ObjectCreated ObjectWasCreated; public event ObjectDeleted ObjectWasDeleted; 然后我有一个方法,它接受我用来做一些常见检查的MulticastDelegate : void DispatchEvent(MulticastDelegate handler, object sender, EventArgs args) { if (handler != null) { // … handler.DynamicInvoke(sender, args); } } 这是从定义事件的类的其他方法中调用的: DispatchEvent(ObjectWasCreated, sender, args); DispatchEvent(ObjectWasDeleted, sender, args); […]

如何在C#中处理多播委托中的exception?

我已经获得了一些我通过多播委托调用的代码。 我想知道如何能够赶上并管理那里提出的任何exception,而目前还没有进行管理。 我无法修改给出的代码。 我一直在环顾四周,发现需要调用GetInvocationList(),但不确定这是否有用。

在C#多播委托中使用多播

何时通过单播代表进行多播委托是否有用? 我使用代理很多,主要是与C#lambdas结合使用,但我从来没有感觉到使用C#委托的多播方面的冲动,即我从来没有想过在一个委托中将多个委托组合在一起。 因此,我很好奇多播代理在什么样的情况下是有用的 – 我只能想到一些例子,你可以通过其他方式轻松实现这些function,比如链接代表或将它们放在列表中。 特别是,Eric Lippert 在这里的回答给人的印象是,即使C#团队有时会忘记代表的多播性。

多播代理必须具有返回类型void。 为什么?

多播代理必须具有返回类型void否则将引发exception。 我想知道它背后的原因是什么,如果多个方法可以具有与委托相同的返回类型呢?

是否有一个委托,它不是C#中的MulticastDelegate?

我觉得答案是否定的? 如果没有,为什么我们将Delegate和MulticastDelegate类分开? 也许是因为“其他一些.NET语言”?