我有一个带有协变类型参数的接口:
interface I<out T>
{
T Value { get; }
}
此外,我有一个非通用基类和另一个派生自它:
class Base
{
}
class Derived : Base
{
}
协方差说 anI<Derived>可以分配给 an I<Base>,并且确实I<Base> ib = default(I<Derived>);编译得很好。
但是,这种行为显然会随着具有继承约束的泛型参数而改变:
class Foo<TDerived, TBase>
where TDerived : TBase
{
void Bar()
{
I<Base> ib = default(I<Derived>); // Compiles fine
I<TBase> itb = default(I<TDerived>); // Compiler error: Cannot implicitly convert type 'I<TDerived>' to 'I<TBase>'. An explicit conversion exists (are you missing a cast?)
}
}
为什么这两种情况不一样对待?
偶然的你
ibeautiful
相关分类