在c#中取消订阅事件的正确方法是什么?

我有一个模型类,其中包含我从其他类订阅的事件.我想在每个类中正确订阅和取消订阅.

>首先,我想保证在MyClass中我只取消一次,即使代码只有少数方法.
>其他除了MyClass之外还有其他类使用OnMyEvent,因此我不想无意中取消订阅该类中的事件.

MyClass(IModel model)
{
  _model = model;
  _model.OnMyEvent +=EventHandle;
}
Close()
{
 _model.OnMyEvent -=EventHandle;
} 
Disconnect()
{
 //I want to check if OnMyEvent has already unsibscribed
 //Moreover OnMyEvent is used in other classes and
 //I don't want to mess up with it here 
 _model.OnMyEvent -=EventHandle;
}
如果您只订阅一次,那么取消订阅的次数并不重要 – 当您没有订阅时取消订阅是无操作.同样,事件API的重点是您不能意外取消订阅其他订阅(其他类型或相同类型的其他实例).

因此,显示的代码应该没问题,尽管将两个调用移动到处理此问题的单个方法可能是值得的.但这可能是矫枉过正的.

此外,如果您的类型是IDisposable,请确保它也在该代码路径中被调用(可能通过调用Close()).

相关文章
相关标签/搜索