Laden...

Eine Liste verschiedener Typen mit gleichem Basistyp erstellen und auf alle Properties zugreifen

Erstellt von helmot123 vor 4 Jahren Letzter Beitrag vor 4 Jahren 812 Views
H
helmot123 Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren
Eine Liste verschiedener Typen mit gleichem Basistyp erstellen und auf alle Properties zugreifen
class HeroClass { skill1 skill2 }
class Batman : HeroClass { skill3 skill4 }
class Robin : HeroClass { skill3 skill4 skill5 }

Ich bin ein ziemlicher Anfänger. Ich möchte eine Liste erstellen, die verschiedene Arten von Objekt Typen enthalten kann.
Wenn ich eine Liste vom Typ "HeroClass" erstelle und darin die Objekte des Typs "Batman" oder "Robin" speichere, kann ich nicht auf dessen spezifische Eigenschaften zugreifen. Gibt es da einen simplen Weg diese Problematik zu umgehen?

eine weitere Frage: wie ihr seht, haben die Klassen Batman und Robin gleiche Eigenschaften (3/4), wäre es besser, "Robin" von der Klasse "Batman" erben zu lassen? Diese Eigenschaften sind völlig gleich (Polymorphismus bleibt da außen vor). Ist das "schlechter Code" , wenn Klassen, die von einer ähnlichen Klasse erben, untereinander die exakt gleichen Eigenschaften haben?

vielen Dank

P
441 Beiträge seit 2014
vor 4 Jahren

Das, was du da machst nennt sich Boxing.
Natürlich kannst du nur auf die Methoden und Properties der Klasse HeroClass zugreifen, die anderen sind dir ja nicht bekannt.

Um das zu lösen gibt es tendenziell mehrere Möglichkeiten:
-> der is Operator


HeroClass currentHera = ...;
if (currentHero is Batman batman) { batman.skill3(); }
elsif (currentHero is Robin robin) { robin.skill5(); }

-> Die Methoden so wählen, dass du in der Basisklasse damit umgehen kannst
Du könntest deine HeroClass so gestalten, dass z.B. eine Attack(HeroClass victim) Methode als abstract deklariert existiert. Jeder von HeroClass erbende Implementierung dann Attack() implementieren und könnte unterschiedliche Effekte haben.
Das ist vermutlich (vermutlich, weil ich deinen eigentlichen Anwendungszweck nicht kenne) Architektonisch die schönere Lösung.

-> Verschiedene Implementierungen des Visitor Patterns, die die unterschiedlichen Implementierungen kennen, z.B. mittels Factory Klasse (das wäre aber nur eine Abwandlung der ersten Lösung mit dem is Operator).