Ich habe ein wenig über generische Varianz gelesen und ich habe noch kein volles Verständnis davon, aber ich würde gerne wissen, ob es so etwas wie das Folgende möglich macht?Kann C# 4.0-Varianz mir helfen, einen Basisklassenkonstruktor mit einem Upcast aufzurufen?
class A<T> { }
class B { }
class C : B { }
class My1 {
public My1(A<B> lessDerivedTemplateParameter)
{
}
}
class My2 : My1 {
public My2(A<C> moreDerivedTemplateParameter)
: base(moreDerivedTemplateParameter) // <-- compile error here, cannot convert
{
}
}
Ich bin nicht so fließend in der generischen Variante ce, wie ich sein möchte, daher ist dies ein Kommentar, keine Antwort, aber ich denke, Sie müssen 'A' definieren als 'A ', um dies zu kompilieren. –
psubsee2003
@ psubse2003: Ich glaube, das ist nur für Schnittstellen erlaubt. – Douglas
interessant, ich habe Ihren Vorschlag plus musste A und Schnittstelle machen, dann kompiliert es ... ich werde weitermachen und sehen, ob ich das gleiche Ergebnis erhalten kann, war ich nach, danke ... –