c#泛型约束问题

本文关键字:问题 约束 泛型 | 更新日期: 2023-09-27 18:06:08

可以在c#基类中声明的派生类型上传播泛型约束吗?

程序显示错误:

类型'T'不能用作泛型类型中的类型参数'T'或者方法Test.Base。没有装箱转换或类型参数从'T'转换为'Test.IBase'.

interface IBase
{
}
class Base<T> where T : IBase
{

}
class Derived<T> : Base<T>
{
}

c#泛型约束问题

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不同。