C#泛型约束问题

时间:2013-03-27 09:26:42

标签: c# .net generics

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

示例程序显示错误:

  

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

interface IBase
{

}

class Base<T> where T : IBase
{


}

class Derived<T> : Base<T>
{

}

3 个答案:

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