struct Item
{
public string Name { get; set; }
public string Description { get; set; }
}
class Inventory
{
/*
인덱서
[접근지정자] [반환형태] this [int i]
{
get{return 반환할 것}
set{세팅할 값}
}
*/
Item[] items; //인벤토리는 아이템'들'을 들고 있다
public Item this[int i]
{
get { return items[i]; }
set { items[i] = value; }
}
//▼ 인벤토리를 통으로 건네주는 프로퍼티 버전
public Item[] Inven
{
get
{
return items;
}
}
//▼ 생성자
public Inventory(int invenSize)
{
items = new Item[invenSize];
}
//▼ 인덱스를 주고, 아이템을 받아오는 기능
public Item GetItem(int index)
{
return items[index];
}
//▼ 인벤토리를 통으로 건네주는 것
public Item[] GetInven()
{
return items;
}
}
static void Main(string[] args)
{
// 자료 구조 , 컨테이너 , 콜렉션 다 같은 말이다.
// 인덱서
Inventory myInven = new Inventory(10);
//배열 전체를 보고 두번째의 이름을 본다
//인덱스상 2번째 아이템을 가져오려면 이렇게 작성
Console.WriteLine(myInven.GetInven()[2].Name);
Console.WriteLine(myInven.Inven[2].Name);
Console.WriteLine(myInven.GetItem(2).Name);
//어떤 방식으로돈 가독성이 좋지 않음
Console.WriteLine(myInven[2]);
// 변수명 옆에 마치 배열의 요소를 접근하듯,
// 인덱스를 넘겨주면 get 을 거쳐서 아이템 가져옴
}
class Troop <T>
{
T[] army;
public T this[int index]
{
get { return army[index]; }
set { army[index] = value; }
}
public Troop(int troopSize) //생성자, 숫자 주면 그만큼을 담을 수 있는 배열 활성화
{
army = new T[troopSize]; // 그저 배열 공간을 빌리기 위한 new라, 굳이 T 에 new() 같은 제약을 걸 필요 없음
}
//public T GetEnemy(int index)
//{
// return army[index];
//}
//public void AddEnemy(T changedEnemy, int index)
//{
// army[index] = changedEnemy;
//}
}