私は2つのインターフェースを持っています、
public interface IDocument<SegType> where SegType : ISegment
と
public interface ISegment
IDocument
基本的に、実装する各クラスが の 1 つのタイプで構成されていること、およびこれらのクラスを使用するユーザーが内部で使用しているクラスISegment
のタイプを知る必要がないことを強制したいと考えています。ISegment
次に、次を実装するクラスを作成しましたIDocument<SegType> where SegType : ISegment
。
public class MyDocument : IDocument<MySegment>
および対応するMySegment
:
public class FffSegment : ISegment
これらはすべて、型として指定したときに期待どおりにコンパイルされ、機能しますMyDocument
。MyDocument
のインスタンスをの型に暗黙的にキャストできないのはなぜIDocument<Isegment>
ですか? 私が行を試すとき:
IDocument<ISegment> doc = new MyDocument();
エラーが発生します
Cannot implicitly convert type 'MyDocument' to 'IDocument<ISegment>'. An explicit conversion exists (are you missing a cast?)
しかし、キャストすると、null が返されます。それを次のように変更すると:
IDocument<MySegment> doc = new MyDocument();
クラス定義を次のように変更した場合と同様に機能します
public class MyDocument : IDocument<ISegment>
IDocument の実装に ISegment を実装する特定の型を強制できないのはなぜですか? 私はこのコードをさまざまなタイプの に再利用したいと考えてIDocument
おりISegment
、いつの日かいくつかの の実装でIDocument
複数のタイプの を許可するようになりますがISegment
、MyDocument
この種の動作に対しては制限する必要があります。これらの要件を強制しながら、将来再利用できる汎用性のあるコードを作成するにはどうすればよいでしょうか?