web-dev-qa-db-ja.com

インターフェイスを実装し、型パラメーターを制約する汎用クラスを定義するにはどうすればよいですか?

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を正しくする方法は?

50
q0987

最初に実装されたインターフェース、次にwhereで区切られたジェネリック型制約:

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

次のようにできます:

public class CommonModel<T> : BaseModel<T>, iMessage where T : ModelClass
6
Moumit
class SampleC<T> : IDisposable where T : IDisposable // case C
{    
    public void Dispose()    
    {        
        throw new NotImplementedException();    
    }
}
6
DuckMaestro
class SampleC<T> : IDisposable where T : IDisposable
{
...
}
2
elder_george