ho due interfacce:C# Generics, interfacce ed ereditarietà
public interface IAmA
{
}
public interface IAmB<T> where T : IAmA
{
}
E due classi che implementano queste interfacce come questo:
public class ClassA : IAmA
{
}
public class ClassB : IAmB<ClassA>
{
}
Quando si cerca di utilizzare queste classi come mostrato:
public class Foo
{
public void Bar()
{
var list = new List<IAmB<IAmA>>();
list.Add(new ClassB());
}
}
Viene visualizzato questo errore del compilatore:
cannot convert from 'ClassB' to 'IAmB<IAmA>'
so di poter fare il compilatore felice con:
public class ClassB : IAmB<IAmA>
{
}
Ma ho bisogno di essere in grado di essere il parametro Type per IAmB<>
in ClassB
un'implementazione di IAmA
.
Che cosa significa "passare un'implementazione di IAmA"? ClassB non * eredita nulla da ClassA, deve ancora implementare ogni membro di IAmB. Perché * deve * ereditare da IAmB anziché IAmB? Qual è il vero problema che stai cercando di risolvere? –
Ho aggiornato la domanda. – Alex
l'aggiornamento non ha spiegato nulla - è chiaro fin dall'inizio che si desidera utilizzare la classe concreta - la domanda è * perché *? –