Wie erweitere ich eine Klasse in C #? [geschlossen]

8

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'.

bekommen

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.

    
markzzz 06.03.2013, 15:20
quelle

5 Antworten

15

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 .

%Vor%     
PaRiMaL RaJ 06.03.2013, 15:28
quelle
4

Weisen Sie Ihrer Student eine Person zu.

%Vor%

Beachten Sie, dass dies das gesamte Casting ziemlich nutzlos macht, besser ist:

%Vor%     
poitroae 06.03.2013 15:22
quelle
1

Fügen Sie in Ihrer Klasse Student diesen Konstruktor hinzu, vorausgesetzt, Sie haben einen Konstruktor, der in der Klasse Person

zwei Zeichenfolgen verwendet %Vor%

Dann kannst du es so benutzen

%Vor%     
Jason 06.03.2013 15:32
quelle
0

Ihre Konvertierung ist falsch, eine Person kann ein Student werden (nicht umgekehrt)

Wechseln zu:

%Vor%

Obwohl Ihre Typumwandlung vermieden werden kann ..

%Vor%

wird ....

%Vor%     
EverythingGeek 06.03.2013 15:25
quelle
0

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.)

    
raynjamin 06.03.2013 21:19
quelle

Tags und Links