The official documentation deprecates users implementing IObservable themselves. Instead, users are expected to use the factory method Observable.Create
When possible, implement new operators by composing existing operators. Otherwise implement custom operators using Observable.Create
It happens that Observable.Create is a trivial wrapper around Reactive’s internal class AnonymousObservable:
public static IObservable<TSource> Create<TSource>(Func<IObserver<TSource>, IDisposable> subscribe)
{
if (subscribe == null)
{
throw new ArgumentNullException("subscribe");
}
return new AnonymousObservable<TSource>(subscribe);
}
I don’t know why they didn’t make their implementation public, but hey, whatever.