我刚刚从 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/