2017-12-22 10 views
1

그리드 기반 인벤토리 시스템으로 게임을 만들고 있지만 문제가 있습니다. 인벤토리에서 여러 유형의 항목을 처리하는 방법을 모르겠습니다.다른 종류의 아이템을 다루는 방법

예컨대

나는 클래스 Item이 : 다음

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

나는이 항목 클래스를

class Weapon: Item 
{ 
    public int damage; 
} 

및 재료 클래스를 상속 무기 클래스

class Material : Item 
{ 
    public int hardness; 
} 

및 내 질문에 List<Item> inventory 같은 목록에 넣고 여전히 모든 속성에 액세스하는 방법입니다. 이것을 접근하는 좋은 방법입니까, 아니면 전혀 다른 시스템이 필요합니까?

+1

[다운 캐스팅] (https://en.wikipedia.org/wiki/Downcasting). – Draco18s

답변

2

isas C# 연산자를 사용하여 개체를 찾아 파생 형식으로 캐스팅 할 수 있습니다.

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(); 
     } 
    } 

} 

당신은 더 많은 예제 here을 볼 수 있습니다 : 다음 예를 참조하십시오.