Ich versuche, ein paar konkrete Instanzen in Sammlung hinzufügen, wo alle konkreten Instanzen von der gleichen Schnittstelle erben. Aber es kompiliert nicht.Wie fügt man einer Sammlung verschiedene konkrete Instanzen hinzu (die alle eine gemeinsame Schnittstelle erben)?
// Common interface.
public interface ISearchService<in TSearchOptions> where TSearchOptions : ISearchOptions
{ .. }
// Concrete #1.
public class FooSearchService : ISearchService<FooSearchOptions>
{ .. }
// Concrete #2.
public class BaaSearchService : ISearchService<BaaSearchOptions>
{ .. }
Also mit dem obigen Code, beide Foo
und Baa
erben beide von einem ISearchService<ISearchOptions>
aber jeder hat ihre eigenen spezifischen Suchoption Typ definiert.
Also versuche ich dies (was nicht kompilieren):
var searchServices = new List<ISearchService<ISearchOptions>>
{
new FooSearchService(),
new BaaSearchService()
};
I've written the full code up on .NET Fiddle.
Die Idee ist, dass ich eine gemeinsame Sammlung von konkreten Instanzen habe, die alle eine gemeinsame Basisschnittstelle haben.
Ich bin mir ziemlich sicher, dass ich hier versagt habe wegen einer * abweichenden Dummheit, die ich ständig einfach nicht verstehe.
Ich dachte, vielleicht versuche ich zu viel zu tun .. so I've tried a new .NET Diffle with something different aber das funktioniert auch nicht.
Kann mir bitte jemand helfen?
Ich möchte nur eine gemischte Tüte einer gemeinsamen generische Schnittstelle :(
Ich denke, Sie meinen "implementieren eine gemeinsame Schnittstelle". Vererbung ist ein Klassen/Unterklassen-Konzept (Suche nach "implementiert" vs "erbt"). Es ist am besten, richtige Sprachkonzepte zu verwenden, um andere Leser, die vielleicht lernen, nicht zu verwirren. –