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

本文关键字:约束 类型参数 泛型类 接口 实现 何定义 定义 | 更新日期: 2023-09-27 17:58:14

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正确?

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

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

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

你可以这样做:

public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass
class SampleC<T> : IDisposable where T : IDisposable
{
...
}

问题是保持"where…"最后

public class BaseRepository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : class 
{
 // enter code here
}