我在我们的项目中添加了一个协变接口:
interface IView
{
}
interface IPresenter<out TView> where TView : IView
{
TView View { get; }
}
我创建了一些类,实现了这些接口:
class TestView : IView
{
}
class TestPresenter : IPresenter<TestView>
{
public TestView View
{
get { return something; }
}
private void DoSomething()
{
}
}
我可以毫无问题地使用它:
IPresenter<IView> presenter = new TestPresenter();
所以一切似乎都是正确的,所以我假设我的协方差使用是正确的。不幸的是,我们的单元测试项目包含来自同一项目中某些类型的私有访问器,例如协变接口,这会导致构建失败。
无法从程序集“GenericInheritanceTest_Accessor,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”加载类型“GenericInheritanceTest.IPresenter_Impl`1”,因为它声明了协变或逆变类型参数,而不是接口或委托。
这里到底有什么问题?我的实施是否有失败,分别。如何解决这个问题?不可能,一旦我们使用协变类型,我们就必须避免访问器???是否可以阻止为某些类型创建访问器来解决此问题?