아카이빙/C#

[C#] 인덱서

셩님 2018. 6. 20. 04:37

[C#] 인덱서

  • 인덱서(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