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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aber in der Tat können Sie werfen einen übergeordneten Objekts an das Kind geben, WENN das Objekt von diesem Typ
InformationsquelleAutor Stochastically
Können Sie werfen
Person
zuCustomer
wenn es wirklich eineCustomer
:Wenn Sie möchten, könnten Sie drei Methoden statt:
Oder Generika verwendet werden (aber ich fühle mich schlecht über Generika in diesem speziellen Fall):
Und nennen es:
Aber müssen Sie noch angeben, was Sie versuchen, auf Zeit nennen.
InformationsquelleAutor MarcinJuraszek
Verwenden "ist" Stichwort
InformationsquelleAutor David