Entwickler-Ecke
C# - Die Sprache - Klasse vererbt, warum klappt CAST nicht?
pascalsv - Mo 09.02.09 17:00
Titel: Klasse vererbt, warum klappt CAST nicht?
Hallo zusammen,
ich arbeite mit zwei Klassen gleicher Struktur, ModelA und ModelB. Die eine brauche ich für die externe Kommunikation, die andere nutze ich intern. Da die Struktur gleich ist, ist Klasse ModelA von ModelB abgeleitet. Die Strukturen ebenfalls. So besteht Klasse ModelA unter anderem aus der Klasse AEntry, die von der Klasse BEntry abgeleitet ist. Wenn ich jedoch Klasse ModelA in Klasse ModelB casten will, erhalte ich eine Fehlermeldung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public class ModelA : DataTypesA { public AEntry[] AEntriesList { get; set; } } *** public class ModelB : DataTypesB { public BEntry[] BEntriesList { get; set; } } *** this.ModelA.AEntriesList = (AEntry[])ModelB.BEntriesList; |
Was mache ich falsch?
Danke!!
JüTho - Mo 09.02.09 17:19
Titel: Re: Klasse vererbt, warum klappt CAST nicht?
pascalsv hat folgendes geschrieben : |
| Was mache ich falsch? |
Du verschweigst vor allem die Fehlermeldung.
pascalsv hat folgendes geschrieben : |
| ich arbeite mit zwei Klassen gleicher Struktur, ModelA und ModelB. |
Die Klassen haben offensichtlich nicht die gleiche Struktur, weil sie unterschiedliche Arrays enthalten.
pascalsv hat folgendes geschrieben : |
| Da die Struktur gleich ist, ist Klasse ModelA von ModelB abgeleitet. |
Auch das stimmt nicht. Klasse ModelA ist von DataTypesA abgeleitet, Klasse ModelB von DataTypesB abgeleitet; einen Zusammenhang dieser Typen kann ich nicht erkennen. Deshalb ist ein cast von ModelA in ModelB oder umgekehrt nicht möglich.
Anscheinend willst Du außerdem das Array konvertieren, nicht die Klassen selbst.
pascalsv hat folgendes geschrieben : |
| ... unter anderem aus der Klasse AEntry, die von der Klasse BEntry abgeleitet ist. |
Dann kannst Du von AEntriesList nach BEntry[] konvertieren, aber nicht umgekehrt (wie Du es willst). (Ich nehme jedenfalls an, dass die Vererbung einer Klasse sich auch auf Arrays dieser Klasse übertragen.)
Du musst also wohl den Zusammenhang Deiner Klassen nochmal überarbeiten. Jürgen
pascalsv - Mo 09.02.09 17:44
Hi Jürgen,
wenn AEntry von BEntry abgeleitet ist, warum kann ich dann nicht den Inhalt von BEntry AEntry zuweisen?
Ich erhalte zur Laufzeit den Fehler: System.InvalidCastException: Das Objekt des Typs BEntry[] kann nicht in Typ AEntry[] umgewandelt werden.
Beim Kompilieren scheint alles in Ordung zu sein, wenn ich
C#-Quelltext
1:
| AEntry[] = (AEntry[])BEntry[]; |
ausführe.
Danke!
bakachan - Mo 09.02.09 17:50
Du beantwortest dir deine Frage selbst:
AEntry ist von BEntry abgeleitet also kannst du nur einer BEntry-Variable einen AEntry Wert zuweisen und nicht andersrum.
pascalsv - Di 10.02.09 09:29
Aaaaargh,
ihr habt ja recht. Vielen Dank!!!
Habe es mir heute morgen noch einmal angesehen und schon fällt es mir wie Schuppen aus den Haaren.... ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!