我想将 .NET 4.0 接口 IObserver 用于需要支持以前版本的框架的库。我已经有了条件编译,可以让我为每个框架版本进行构建。
我不想使用 Rx Extensions 的版本,IObserver<T>
因为这会给原本独立的程序集添加不必要的依赖项。
我正在考虑将这段代码添加到我的库中,我对你们所有人的问题是:
1)我知道这是个坏主意,但我想弄清楚,“为什么?”
#if !NET40
namespace System
{
public interface IObserver<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
}
#endif
我想使用标准接口,以便 .NET 4.0 用户能够以我还没有想到的很酷的方式进行集成。所以我不想只是重复这个概念并松散与其他即将出现的IObservable<T>
用法的集成。
我看到的危险是,如果我的库的 .NET 3.5 版本在 .NET 4.0 中使用,可能会出现类型冲突。不过,理想情况下,使用 v4.0 的人会使用 4.0 版本的库。
使用这种方法还有什么我应该注意的吗?
2)或者,我已经考虑在我的代码中这样做(这是我倾向于的方向)并且想知道人们对为什么这是一个坏主意的想法:
#if !NET40
namespace Foo
{
public interface IObserverProxy<in T>
{
void OnCompleted();
void OnError(Exception error);
void OnNext(T value);
}
}
#endif
后来我想在哪里使用它:
#if NET40
using IObserverBar=System.IObserver<Bar>;
#else
using IObserverBar=Foo.IObserverProxy<Bar>;
#endif
有什么想法吗?