【发布时间】:2017-04-25 11:36:14
【问题描述】:
在这种情况下是否可以立即调用 dispose 和取消订阅事件? context_ 用于管理一个简单的状态机,我们基本上通过创建一个新状态机来启动和停止它。
class ClassA
{
StateContext context_;
void SomeMethod()
{
if(context_ != null)
context_.Dispose();
context_ = new StateContext();
}
class StateContext : IDisposable
{
SubClassA()
{
//Subscribe to an event
}
void Dispose()
{
//unsubscribe to an Event
}
}
}
【问题讨论】:
-
不,您违反了 IDisposable 合同。违反合同需要额外的关注和大量评论。只要课程不公开,您就可以逍遥法外。
-
如果实际代码真的很像示例代码,你真的可以简单地将
Dispose变成Unsubscribe,而不是实现IDisposable,并且仍然有相同的行为而不需要问“我是不是允许制作符合我想要的逻辑的方法"
标签: c# events idisposable unsubscribe