在回答另一个问题后,我尝试了以下操作。我认为我没有正确解释那个问题,但我想知道下面的内容是否可能(我的尝试失败了),如果不可能,为什么不可能:
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的问题),它不可能、不可取还是在“也许有一天”的清单上?