Как определить общий класс, который реализует интерфейс и сдерживает параметр типа?
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?
Ответы
Ответ 1
Сначала реализованные интерфейсы, а затем ограничения общего типа, разделенные where
:
class SampleC<T> : IDisposable where T : IDisposable // case C
{ // ↑
public void Dispose()
{
throw new NotImplementedException();
}
}
Ответ 2
class SampleC<T> : IDisposable where T : IDisposable // case C
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Ответ 3
Вы можете сделать это следующим образом:
public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass
Ответ 4
class SampleC<T> : IDisposable where T : IDisposable
{
...
}