Ich habe mein eigenes Objekt, und ich möchte es erweitern, indem ich Daten von einer Person speichere und neue Informationen hinzufüge.
Also wäre der Code:
%Vor%aber wenn ich versuche es zu initiieren und den neuen Wert hinzuzufügen:
%Vor% Ich habe System.InvalidCastException: Unable to cast object of type 'MyLayer.Person' to type 'Student'.
Vermisse ich einen Punkt?
BEARBEITEN : Vielleicht habe ich diese Personenklasse falsch gesetzt. Sie müssen davon ausgehen, dass es von einem DB als Objekt stammt, beispielsweise Person person = new MyPersons().First();
Ich werde also die neue Eigenschaft nicht einzeln mit Eigenschaften füllen, sondern nur eine Eigenschaft erweitern, dank des neuen Objekts, das die alte erweitert.
Sie können ein Person
nicht direkt in Student
konvertieren.
Die Vererbung in OOP kommt mit hierarchy level
, d. h. Sie können die Klasse derived
in die Klasse base
, aber die opposite is not possible
umwandeln. You cannot cast base class to derived class
Eine mögliche Lösung ist:
Erzeuge Student
von Person mit constructor overload
.
Ihre Konvertierung ist falsch, eine Person kann ein Student werden (nicht umgekehrt)
Wechseln zu:
%Vor%Obwohl Ihre Typumwandlung vermieden werden kann ..
%Vor%wird ....
%Vor%Das Problem, das Sie sehen, ist, dass Sie in Ihrer Aufgabe versuchen, Person zu Student zu reduzieren. Dies ist nicht möglich, weil das Objekt eine Person ist und der Personentyp keine Kenntnis von Student hat.
Meine Interpretation davon ist, dass Objekte einen bestimmten Typ haben, unabhängig davon, wie Sie sie gewirkt haben. Eine Besetzung (wie die Art, wie Licht auf ein Objekt geworfen wird) bestimmt nur, wie Sie dieses Objekt sehen. Im Beispielfall hat eine Person keine Kenntnis von einem Schüler, daher können Sie ihn, egal wie Sie ihn betrachten, nicht dem Schüler zuordnen.
Ein Schülerobjekt kann jedoch auf eine Person übertragen werden, da jeder Schüler eine Person ist. Sie können immer zu Basisklassen wechseln, aber nicht immer zu abgeleiteten Klassen.
Ich hoffe, das gibt Ihnen etwas Klarheit. (Ich hoffe auch, dass ich das völlig richtig verstanden habe.)