做一个密封的class自己Observable<T>的Observer属性
Make a sealed class the Observer of its own Observable<T> property
我有一个密封的class。它有一个 属性
'
private IObservable<AnotherClass> observable
'.
- 我想把这个class做成一个观察者,监视上面属性的变化。
- 我想在这个 属性 发生变化时调用 onNext()。
- 我想在 .onNext() 中调用自定义方法 1()。像 onNext(调用 Method1(传递可观察数据))。
由于这是一个密封的 class,我无法像在许多示例中发现的那样使用 Virtual onNext()。
我如何实现这些?
实施 IObserver<AnotherClass>
并订阅 observable?
public sealed class AnObserver : IObserver<AnotherClass>
{
private readonly IObservable<AnotherClass> observable;
public AnObserver()
{
observable = ...;
observable.Subscribe(this);
}
void IObserver<AnotherClass>.OnCompleted() { }
void IObserver<AnotherClass>.OnError(Exception error) { }
void IObserver<AnotherClass>.OnNext(AnotherClass value)
{
Method1(value);
}
public void Method1(AnotherClass value)
{
...
}
}
下面是我将如何处理这种情况。
public sealed class ThisClass : IDisposable
{
private readonly IObservable<AnotherClass> observable;
private readonly IDisposable subscription;
public ThisClass()
{
observable = ...;
subscription = observable.Subscribe(x => Method1(x));
}
private void Method1(AnotherClass value)
{
...
}
private bool disposedValue = false;
void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
subscription.Dispose();
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
}
}
这不会向外界暴露任何不必要的东西,并且会在处理时进行清理。
我有一个密封的class。它有一个 属性 '
private IObservable<AnotherClass> observable
'.
- 我想把这个class做成一个观察者,监视上面属性的变化。
- 我想在这个 属性 发生变化时调用 onNext()。
- 我想在 .onNext() 中调用自定义方法 1()。像 onNext(调用 Method1(传递可观察数据))。 由于这是一个密封的 class,我无法像在许多示例中发现的那样使用 Virtual onNext()。
我如何实现这些?
实施 IObserver<AnotherClass>
并订阅 observable?
public sealed class AnObserver : IObserver<AnotherClass>
{
private readonly IObservable<AnotherClass> observable;
public AnObserver()
{
observable = ...;
observable.Subscribe(this);
}
void IObserver<AnotherClass>.OnCompleted() { }
void IObserver<AnotherClass>.OnError(Exception error) { }
void IObserver<AnotherClass>.OnNext(AnotherClass value)
{
Method1(value);
}
public void Method1(AnotherClass value)
{
...
}
}
下面是我将如何处理这种情况。
public sealed class ThisClass : IDisposable
{
private readonly IObservable<AnotherClass> observable;
private readonly IDisposable subscription;
public ThisClass()
{
observable = ...;
subscription = observable.Subscribe(x => Method1(x));
}
private void Method1(AnotherClass value)
{
...
}
private bool disposedValue = false;
void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
subscription.Dispose();
}
disposedValue = true;
}
}
public void Dispose()
{
Dispose(true);
}
}
这不会向外界暴露任何不必要的东西,并且会在处理时进行清理。