배열처럼 []를 통해 클래스의 요소에 접근할 수 있도록 제공되는 구문이다.
[접근 제한자] [반환 타입] this[[인덱스 타입] [인덱스 식별자]]
{
[접근 제한자] get
{
// [코드]
}
[접근 제한자] set
{
// [코드]
}
}
식별자 대신 this 키워드를 사용한다는 점, 인덱스 타입과 인덱스 식별자를 지정한다는 점을 제외하면 프로퍼티와 사용법이 같다.
마찬가지로 set을 생략하여 읽기 전용으로 만들 수도 있다.
class Program
{
class TestIndexer
{
int[] readonlyArray;
public TestIndexer(int[] arr)
{
readonlyArray = arr;
}
public int this[int index]
{
get { return readonlyArray[index]; }
}
public override string ToString()
{
return string.Join(" ", readonlyArray);
}
}
static void Main(string[] args)
{
TestIndexer testIndexer = new TestIndexer(new int[] { 1, 2, 3 });
Console.WriteLine(testIndexer.ToString());
Console.WriteLine(testIndexer[0]);
Console.WriteLine(testIndexer[1]);
Console.WriteLine(testIndexer[2]);
}
}
// 출력:
// 1 2 3
// 1
// 2
// 3
간편하지만 직관적이지 않고 메서드로 대체가 가능하기 때문에 일반적으로 잘 쓰이진 않는다.
참고 자료
시작하세요! C# 10 프로그래밍 - 정성태