Bru*_*ell 3 c# generics types constraints implicit
我有以下课程:
public class Item<TItem>
where TItem : Item<TItem>
{
void GetReference()
{
TItem item = this;
}
}
Run Code Online (Sandbox Code Playgroud)
这里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!
}
Run Code Online (Sandbox Code Playgroud)
EvilItem满足TItem没有问题的约束- GoodItem确实是源于Item<GoodItem>.
没有办法表达声明的类和类型参数之间的关系,这是你真正想要的.