做一个密封的class自己Observable<T>的Observer属性

Make a sealed class the Observer of its own Observable<T> property

我有一个密封的class。它有一个 属性 '

private IObservable<AnotherClass> observable

'.

  1. 我想把这个class做成一个观察者,监视上面属性的变化。
  2. 我想在这个 属性 发生变化时调用 onNext()。
  3. 我想在 .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);
    }
}

这不会向外界暴露任何不必要的东西,并且会在处理时进行清理。