我有以下课程:
public class Item<TItem>
where TItem : Item<TItem>
{
void GetReference()
{
TItem item = this;
}
}
这会TItem item = this;
产生一个编译器错误“无法Item<TItem>
隐式转换为TItem
”。
但是,为什么我们需要在这里进行转换?我们已经定义了约束where TItem : Item<TItem>
,因此可以认为根本不需要转换,因为这两种类型是相同的,不是吗?
顺便说一句,可以进行显式转换。编译器错误中也说明了这一点。
因为那不安全。考虑:
public class GoodItem : Item<GoodItem>
{
// No problem
}
public class EvilItem : Item<GoodItem>
{
// GetReference body would be equivalent to
// GoodItem item = this;
// ... but this *isn't* a GoodItem, it's an EvilItem!
}
EvilItem
完全满足的约束TItem
-GoodItem
确实源自Item<GoodItem>
。
您无法真正表达要声明的类与类型参数之间的关系。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句