배열형태의 클래스를 만들다 보면, 항상 인덱스 오퍼레이터를 가지고 있다.
C++에서 종종 이 operator를 오버라이딩해서 구현하곤 했는데,
내가 기억하는 C++ operator 처리 방법때로는 계속 에러를 뿜어 댔다.
문법을 정확히 기억하지 못해 헤매다가,
MS에서 제공하는 csharp language specification.doc 라는 파일을 구해서
간신히 찾아서 해결했다.

C#에 있는 Property 문법을 사용해서 구현하면 operator [] 를 생각보다 간단하게
구현할 수 있었다.

public object this[string sKey]
{
     get
     {
          return this.GetData(sKey);
      }
      set
      {
          this.SetData(sKey, value);
      }
}


대략 코드를 보면 알 수 있긴 하지만,
키 코드는 this 이 부분이다. 즉 보통 배열의 인덱스를 사용하는 방법을 보게 되면,
 KK[i] = 44; 

라는 형식으로 KK 부분이 바로 해당 클래스의 변수 자체를 가르키게 된다. 그러므로 operator
에서 this를 쓴다. 그리고 난 뒤 , [  ] 안쪽에 무슨 값으로 구분하는지에 따라,
해당하는 변수를 구성해주면 된다.
만일 숫자인 경우 [int nIndex] 형식으로 써주면 되고, 지금 필자 같이 문자열이라면
[string sKey] 이런 식으로 쓰면 된다.

나머지는 C#의 get / set 의 구현 방법에 맞게 원하는 코드를 넣기만 하면 된다.


728x90

+ Recent posts