2017-12-22 7 views
1

Ich mache ein Spiel für die Einheit mit dem Grid-basierten Inventar-System, aber ich habe ein Problem. Ich weiß nicht, wie ich mit verschiedenen Arten von Gegenständen im Inventar umgehen soll.Wie man verschiedene Arten von Artikeln behandelt

beispiels

Ich habe eine Klasse Item:

class Item 
{ 
    public int ID; 
    public string name; 
} 

dann habe ich Waffe Klasse, die Item-Klasse

class Weapon: Item 
{ 
    public int damage; 
} 

und Materialklasse

class Material : Item 
{ 
    public int hardness; 
} 
erbt

und meine Frage ist, wie Sie sie in die gleiche Liste wie List<Item> inventory setzen, und immer noch auf alle ihre Eigenschaften zugreifen. Ist das ein guter Weg dies zu erreichen oder brauche ich ein komplett anderes System?

+1

[Downcasting] (https://en.wikipedia.org/wiki/Downcasting). – Draco18s

Antwort

2

Sie können is und as C# -Operatoren verwenden, um Ihre Objekte zu ihrem abgeleiteten Typ zu finden und zu umwandeln. Siehe das folgende Beispiel:

class Item 
{ 
    public int ID; 
    public string name; 
} 

class Weapon : Item 
{ 
    public int damage; 
} 

class Material : Item 
{ 
    public int hardness; 
} 


void Main() 
{ 
    List<Item> inventory = new List<Item>(); 
    inventory.Add(new Weapon 
    { 
     name = "weapon", 
     ID = 1, 
     damage = 10, 
    }); 


    inventory.Add(new Material 
    { 
     name = "material", 
     ID = 1, 
     hardness = 100, 
    }); 

    foreach (var item in inventory) 
    { 
     if (item is Weapon) 
     { 
      var weapon = item as Weapon; 
      weapon.Dump(); 
     } 
     if (item is Material) 
     { 
      var material = item as Material; 
      material.Dump(); 
     } 
    } 

} 

Sie können here weitere Beispiele sehen.

Verwandte Themen