순서

I. Indexer
II. Indexer Example

 


I.Indexer

 

Indexer는 클래스 내부의 컬렉션(배열 리스트)등 데이터에 접근할 때
멤버[index]로 접근하는 것이 아니라 클래스[index]로 접근하는 방식이다.

사용법이 배열과 비슷하지만 실제로 객체를 배열로 쓰지는 않는다.

Property와 같은 방식이지만 매개변수를 사용한다는 점이 다르다.

 


II. Indexer Example

 

public class Indexer {
  public string[] myStrList = new string[3];
  
  // indexer 구현 this가 사용된다.
  public string this[int i] {
    get => myStrList[i];
    set => emps[i] = value;
  }
}  

// Generic Programming을 이용한 방법
public class GenericIndexer {
  private T[] myGenArray = new T[10];
  
  public T this[int i] {
    get => myGenArray[i];
    set => myGenArray[i] = value;
  }
}

public class CMain() {
  static void Main() {
    Indexer normalIdxer = new Indexer();
    GenericIndexer<int> GenIdxer = new GenericIndexer<int>();
    // 일반적인 접근
    normalIdxer.myStrList[1];
    // Indexer를 이용한 접근
    // class의 ref명을 그대로 배열로 사용한다.
    // 그러면 this [int i] 부분이 호출된다.
    string mystr = normalIdxer[1];
    int myInt = GenIdxer[5];
  }
}

Property와 구현이 똑같지만, 함수명이 변수명이 되는 Property와는 다르게
this 포인터가 Property 구현의 함수명처럼 사용된다.

Indexer를 사용하면 매개변수를 넣을 수 있는데 int 뿐 아니라 string으로도 첨자를 사용할 수 있다.

+ Recent posts