c# - 清除所有事件订阅(克隆链接)

标签 c# events clone

我刚刚从 ICloneable 实现了克隆,并意识到来 self 的源实例的事件订阅也随之而来。有什么好的方法可以清除所有这些吗?

目前,我对每个必须清除所有内容的事件都使用了几个这样的循环。

foreach (var eventhandler in OnIdChanged.GetInvocationList())
{
    OnIdChanged -= (ItemEventHandler) eventhandler;
}

foreach (var eventhandler in OnNameChanged.GetInvocationList())
{
    ...

这工作正常,但代码有点困惑。主要是担心事件悬而未决。

最佳答案

我认为您可以在克隆的对象中设置 OnIdChanged = null

创建克隆后,您只需调用克隆上的 ClearEvents 方法即可。

public class ClonedObject
{
    public event EventHandler OnIdChanged;
    public event EventHandler OnNameChanged;

    public void ClearEvents()
    {
        OnIdChanged = null;
        OnNameChanged = null;
    }
}

关于c# - 清除所有事件订阅(克隆链接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2897691/

相关文章:

c# - 如何克隆 FileStream 类型?

java - 如何在 CLONE JPanel 中使用 paint()?

c# - c#问题中的正则表达式

html - element.addEventListener不添加监听器

c# - 如果 Try/Catch 中没有捕获则运行代码

java - 何时使用 EventListenerList 而不是一般的监听器集合

java - 如何编写 JUnit 测试用例来测试线程和事件

c# - 如何在 .NET 中进行对象的深拷贝?

c# - C# 将对象转换为二维数组

c# - 日期采用 MM/dd/yyyy 格式,这在服务器上是错误的