【发布时间】:2012-02-21 16:45:40
【问题描述】:
为了回应另一个question,我尝试执行以下操作。我认为我没有正确解释这个问题,但我想知道以下是否可能(我的尝试失败了),如果不是,为什么不:
public class MyBaseClass { }
public class MyClass : MyBaseClass { }
public class B<T> { }
public class A<T> : B<T> { }
static void Main(string[] args)
{
// Does not compile
B<MyBaseClass> myVar = new A<MyClass>();
}
我认为这可以使用带有协变类型参数的通用接口来工作:
interface IB<out T> { }
public class B<T> : IB<T> { }
但我错了,这也不起作用。
编辑
正如 SLaks 所指出的,“接口是协变的;课程不是。 (感谢 SLaks)。所以现在我的问题是为什么?设计背后的想法是什么(我认为是 Eric Lippert 的想法)是不可能的、不可取的还是在“也许有一天”的清单上?
【问题讨论】:
标签: c# .net generics covariance