인덱서(Indexer)는 인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티이다.
인덱서 선언
class 클래스이름
{
한정자 인덱서형식 this[형식 index]
{
get
{
// index를 이용하여 내부 데이터 변환
}
set
{
// index를 이용하여 내부 데이터 저장
}
}
}
Item 클래스를 정의하고, Item 배열을 필드로 갖는 ItemList 클래스에 인덱서를 활용해보자
Item 클래스
class Item
{
public string Name{get;set;}
public int Count{get;set;}
public override string ToString()
{
return string.Format("(Name : {0}, Count : {1})", Name, Count);
}
}
ItemList 클래스
class ItemList
{
private Item[] arr;
public ItemList(int value)
{
arr = new Item[value];
}
public Item this[int index]
{
get
{
return arr[index];
}
set
{
if(index >= arr.Length)
{
Array.Resize<Item>(ref arr, index + 1);
}
arr[index] = value;
}
}
public void Print()
{
Array.ForEach<Item>(arr, (x) => Console.WriteLine(x));
}
}
배열의 범위를 초과하는 인덱스에 접근하면 resize후 반환한다.
테스트
class MainApp
{
static void Main()
{
ItemList itemList = new ItemList(3);
itemList[0] = new Item(){
Name = "고양이 수염",
Count = 3
};
itemList[1] = new Item(){
Name = "치즈맛 젤리",
Count = 12
};
itemList[2] = new Item(){
Name = "츄르",
Count = 43
};
itemList[4] = new Item(){
Name = "두부모래",
Count = 53
};
itemList.Print();
}
}
(Name : 고양이 수염, Count : 3)
(Name : 치즈맛 젤리, Count : 12)
(Name : 츄르, Count : 43)
(Name : 두부모래, Count : 53)
참조
뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어
'아카이빙 > C#' 카테고리의 다른 글
[C#] 제네릭 메소드 (0) | 2018.06.21 |
---|---|
[C#] foreach 가능한 객체 만들기 (0) | 2018.06.20 |
[C#] System.Array (0) | 2018.06.20 |
[C#] 프로퍼티 (0) | 2018.06.20 |
[C#] 추상클래스와 인터페이스 (0) | 2018.06.18 |