2

私は次のインターフェースを持っています

public interface IRevision<TRevisionType>
{ ... }

public interface IRevisionLog
{ ... }

public interface IRevisionControl<in TRevision, TLogType,T>
  where TRevision : IRevision<T> 
  where TLogType : IRevisionLog
{ ... }

このコードは正常にコンパイルされますが、この最後の T は本当に必要なのでしょうか? IRevision を実装すると、型 T が渡されるので、型を複製する必要はありません。

私のデモの実装は次のようになります。

public class HgRevision : IRevision<string>
{ ...}

public class HgLog : IRevisionLog
{ ... }

public class Hg : IRevisionControl<HgRevision, HgLog, string>

文字列を 2 回渡しています。私はこのようなことができるかどうか疑問に思っています:

public interface IRevisionControl<in TRevision, TLogType>
  where TRevision : IRevision
  where TLogType : IRevisionLog
{ ... }

したがって、私のHgは次のようになります。

public class Hg : IRevisionControl<HgRevision, HgLog>

もちろん、この最後のスニペットはコンパイルされません。

4

2 に答える 2