我可以在C#中基类中声明的派生类型上传播泛型约束吗?
示例程序显示错误:
类型'T'不能用作泛型类型中的类型参数'T' 或方法'Test.Base'。没有装箱转换或类型参数 从'T'转换为'Test.IBase'。
interface IBase
{
}
class Base<T> where T : IBase
{
}
class Derived<T> : Base<T>
{
}
答案 0 :(得分:4)
class Derived<T> : Base<T> where T : IBase
{
}
答案 1 :(得分:1)
在Derived<T>
课程中,您未指定T
必须实施IBase
,因为它在Base<T>
中用作类型参数,您不能说可以使用任何T
。将其更改为:
class Derived<T> : Base<T> where T : IBase
答案 2 :(得分:0)
应该是:
class Derived<T> : Base<T> where T : IBase
{
}
总是明确地设置你的约束,因为T只是一个声明,它与你的基类中的T不同。