Hallo Community!
habe ein kleines Verstädnisproblem, wie ich folgenden Sachverhalt am besten lösen kann.
Ich habe eine Klasse "Item", von der z.B. die Klasse "Weapon" erbt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| class Item { internal string name; internal string type; }
class Weapon : Item { public int dice; public int modifier; |
Ich habe nun eine weitere Klasse die Objekte des Types "Item", die sowohl Basisobjekte (Item) als
auch die vererbten wie z.B. Weapon, Shield,... halten soll.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| class Outfit { Item rightHand; Item leftHand; public void setLeftHand(Item obj, Hero myHero) { if (obj.ToString() == "Weapon") { obj = (Weapon)obj;
|
Mein Problem nun:
a) Ich möchte erkennen welche Klasse nun an die Methode übergeben wird (also Item oder eine vererbte).
Ich denke das geht elleganter als mit "if (obj.ToString() == "Weapon")" oder?
b) Ich möchte je nachdem welche Klasse übergeben wird, anders darauf reagieren und vor allem
möchte ich (was derzeit nicht klappt) auch Zugriff auf die spezifischen Variablen der vererbten
Klasse haben (also wenn es eine Weapon ist, dann möchte ich über "obj.dice" auf die Variablen zugreifen
können.
Hab versucht das Objekt zu casten "(Weapon)obj", aber das scheint nicht den gewünschten erfolg zu bringen.
Wie löst man diesen Sachverhalt sauber?
Danke fürs lesen!
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt