Heim >Backend-Entwicklung >C++ >Kann ich einer Basisklassenliste in C#eine Liste abgeleiteter Klassenobjekte zuweisen?
c# In der C# -Programmiersprache löst eine Liste der abgeleiteten Klassenobjekte in die Basisklassenreferenzliste das Problem der Zusammenarbeit aus. Dieses Problem tritt auf, wenn die abgeleitete Kategorie in der Basisklasse nicht vorhanden ist.
Betrachten Sie beispielsweise den folgenden Code:
In diesem Code wird die Liste des Giraffe -Objekts der von Tier verwiesenen Liste zugeordnet. Diese Zuordnung ist jedoch während der Zusammenstellung aufgrund des Koordinationsproblems fehlgeschlagen.
<code class="language-csharp">class Animal { } class Giraffe : Animal { } static void Main(string[] args) { List<Giraffe> giraffes = new List<Giraffe>(); List<Animal> animals = giraffes; // 编译时错误 }</code>
Zusammenarbeit und Nichtversorgung
Die generischen Typen von c #können koordiniert oder unverändert werden. Die Koordination ermöglicht es Basisklassenreferenzen, die abgeleiteten Klassenobjekte zu referenzieren, während die Nicht -Dezgeneration solche Zuordnungen verhindert. Für die Liste ist das Standardverhalten nicht -variabilität, was bedeutet, dass die Liste nicht der Liste
zugewiesen werden kann.
Um dieses Problem zu lösen, gibt es mehrere Lösungen:
Explizite Konvertierung:Der folgende Code kann verwendet werden, um die Liste
zu anzeigen, um<code class="language-csharp">List<Animal> animals = (List<Animal>)giraffes; // 不推荐,可能导致运行时错误</code>Sie können mit der Liste
.ConvertAll -Methode die Liste
verwenden, um<code class="language-csharp">List<Animal> animals = giraffes.ConvertAll(g => (Animal)g);</code>Es kann explizit angegeben werden, um die kollaborative Änderung generischer Typen über benutzerdefinierte Schnittstellen anzugeben. Durch die Implementierung der icovarianten
Welche Methode zu wählen, hängt von der spezifischen Situation und den Anforderungen für die Robustheit des Codes ab. Die ICovariant<out T>
Das obige ist der detaillierte Inhalt vonKann ich einer Basisklassenliste in C#eine Liste abgeleiteter Klassenobjekte zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!