我使用Reactive Extensions(Rx)Subject作为C#事件的直接替代品,如下所示:
public class MyClass { private Subjectsubject; public IObservable WhenSomethingHappened { get { return this.subject.AsObservable(); } } private void OnSomethingHappened(string something) { this.subject.OnNext(something); } }
请注意,我从未在我的主题上调用OnCompleted.MyClass应该实现IDisposable并调用this.subject.Dispose吗?这意味着使用Subject的任何实现都应该实现IDisposable.
我问的原因是IDisposable模式有点像疾病,如果有一件事实现它,使用它的一切都必须实现它.
不,你真的不需要这样做.在担心内存使用和生命周期时,请考虑处理订阅,而不是主题.