私は、すべての具体的なインスタンスが同じインターフェイスから継承するいくつかの具体的なインスタンスをコレクションに追加しようとしています。しかし、それはコンパイルされません。異なる具体的なインスタンス(共通のインタフェースをすべて継承する)をコレクションに追加するにはどうすればよいですか?
// Common interface.
public interface ISearchService<in TSearchOptions> where TSearchOptions : ISearchOptions
{ .. }
// Concrete #1.
public class FooSearchService : ISearchService<FooSearchOptions>
{ .. }
// Concrete #2.
public class BaaSearchService : ISearchService<BaaSearchOptions>
{ .. }
は、したがって、上記のコードでは、両方のFoo
Baa
との両方がISearchService<ISearchOptions>
から継承するが、それぞれが独自の特定SearchOptionsタイプを定義しています。
それでは、私は(コンパイルされません)これをしようとしている:
var searchServices = new List<ISearchService<ISearchOptions>>
{
new FooSearchService(),
new BaaSearchService()
};
I've written the full code up on .NET Fiddle。
アイデアは、共通の基本インターフェイスを持つ具体的なインスタンスの共通コレクションを持っているということです。
私は、私が絶えず理解していないばかつきの愚かさのためにこれで失敗していると確信しています。
私はおそらくあまりにも多くをしようとしていると思った.. so I've tried a new .NET Diffle with something differentしかし、それも動作しません。
誰でもお手伝いできますか?
私はちょうど一般的な汎用インタフェースの混合袋をしたい:(
私はあなたが "共通のインターフェースを実装する"ことを意味すると思います。継承はクラス/サブクラスの概念です( "implements"と "inherits"の検索)。適切な言語の概念を使用して、学習しているかもしれない他の読者を混乱させないようにすることが最善です。 –