Warum kann ich nicht zuordnen eine Liste<Abgeleitet> Liste<Base>?

Definierte ich die folgende Klasse:

public abstract class AbstractPackageCall
    {

     ...

    }

Ich auch durch die Definition einer Unterklasse dieser Klasse:

class PackageCall : AbstractPackageCall
    {

      ...
    }

Es gibt auch mehrere andere subclases von AbstractPackageCall

Nun möchte ich den folgenden Aufruf:

 List<AbstractPackageCall> calls = package.getCalls();

Aber ich bekomme immer diese exception:

Error   13  Cannot implicitly convert type 'System.Collections.Generic.List<Prototype_Concept_2.model.PackageCall>' to 'System.Collections.Generic.List<Prototype_Concept_2.model.AbstractPackageCall>' 

Was ist hier das problem? Dies ist die Methode Package#getCalls

 internal List<PackageCall> getCalls()
        {
            return calls;
        }
Es heißt Kovarianz/Kontravarianz mit Generika. Check out dies, SO Frage.
Wenn Sie zurückkehren können, eine IEnumerable<AbstractPackageCall> statt List<AbstractPackageCall> dann funktioniert das wie IEnumerable<> unterstützt Kovarianz.
Sie können auch daran interessiert sein, Lesen Sie diese zwei Seiten. Lesen Sie diese aus co-/contra - Varianz auf, die für mich C# 4.0 die FUNKTION im FOKUS – TEIL 4 – CO - UND CONTRA-VARIANZ FÜR GENERISCHE DELEGAT-UND INTERFACE-TYPEN und natürlich Eric Lippert hat eine Menge Beiträge zu dem Thema.
Danke für die vielen Antworten, endlich habe ich glaube ich verstehe das Konzept der Kovarianz.

InformationsquelleAutor | 2011-01-10

Schreibe einen Kommentar