我可以在 C# 的基类中声明的派生类型上传播通用约束吗?
示例程序显示错误:
类型“T”不能用作泛型类型或方法“Test.Base”中的类型参数“T”。没有从“T”到“Test.IBase”的装箱转换或类型参数转换。
interface IBase
{
}
class Base<T> where T : IBase
{
}
class Derived<T> : Base<T>
{
}
class Derived<T> : Base<T> where T : IBase
{
}
在您的Derived<T>
课程中,您没有指定T
必须实现IBase
的内容,并且因为它被用作类型参数,Base<T>
所以您不能说任何T
可以使用。将其更改为:
class Derived<T> : Base<T> where T : IBase
应该:
class Derived<T> : Base<T> where T : IBase
{
}
始终明确地放置您的约束,因为 T 只是一个声明,它与您的基类中的 T 不同。