c# Vererbung: casting von Eltern-Objekt auf das Kind

Wissen wir, dass es nicht möglich ist die Besetzung eines übergeordneten Objekts zu einem Ihrer untergeordneten Klassen.

Also, was ist ein guter Ansatz zur Lösung des folgenden Problems:
Sagen wir, ich habe eine Basisklasse "Person" und die beiden untergeordneten Klassen: Customer und Employee. Beachten Sie, dass die Person-Klasse ist nicht abstrakte (D. H. es kann sein, instanziert).
Nun habe ich die folgende Methode Signatur:

public Person GetPersonById(long id)

Dadurch ist es möglich, entweder die Rückkehr einer Person, oder eines Ihrer untergeordneten Klassen.
Wenn ich diese Methode verwenden, kann ich über GetType (), ob, wenn es ein Kind ist oder nicht. Allerdings kann ich nicht einfach den Zugriff auf die Felder/Methoden spezifisch für die untergeordnete Klasse, da kann ich nicht einfach casten.
Ein Ansatz wäre, einen Konstruktor implementieren, der für jedes Kind der Klasse, das nimmt die übergeordnete Klasse als parameter und gibt ein neues Kind in der Klasse-Instanz. Dies hat den Nachteil, dass ich noch hätte viel doppelter code (weil ich die Zuordnung jeder Elternteil-Feld jedes Kind auch).

Anderen Ansatz, den ich denken kann, wäre die Methode ändern:

public object GetPersonById(long id)

So, ich konnte wieder jede Klasse. Ich würde einfach mal den Typ der zurückgegebenen Klasse und dann warf es richtig. Aber irgendwie, dieser Ansatz scheint schmutzig.

Hat jemand einen besseren Weg, dies zu tun?

InformationsquelleAutor Cleo | 2013-04-11

Schreibe einen Kommentar