私は次のインターフェースを持っています
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>
もちろん、この最後のスニペットはコンパイルされません。