如何定义实现接口并约束类型参数的泛型类?

时间:2011-06-03 04:50:35

标签: c# generics inheritance constraints

class Sample<T> : IDisposable // case A
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

class SampleB<T> where T : IDisposable // case B
{
}

class SampleC<T> : IDisposable, T : IDisposable // case C
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

案例C是案例A和案例B的组合。这可能吗? 如何使案例C正确?

4 个答案:

答案 0 :(得分:75)

首先是已实现的接口,然后是由where分隔的泛型类型约束:

class SampleC<T> : IDisposable where T : IDisposable // case C
{        //                      ↑
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:6)

class SampleC<T> : IDisposable where T : IDisposable // case C
{    
    public void Dispose()    
    {        
        throw new NotImplementedException();    
    }
}

答案 2 :(得分:6)

你可以这样做:

public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass

答案 3 :(得分:2)

class SampleC<T> : IDisposable where T : IDisposable
{
...
}