티스토리 뷰
인덱서란 클래스나 구조체의 인스턴스를 배열처럼 사용할 수 있는 방법을 말한다. 인덱싱된 값은 다양한 형태의 매개 변수를 사용하여 반환하거나 할당할 수 있다. 이러한 인덱서는 매개 변수를 사용한다는 점을 제외하면 Property와 유사한데 컴파일러가 항상 인덱서에 올바른 스토리지를 생성할 수 있는 것은 아니라 Property와 다르게 자동 구현 속성을 사용할 수 없다.
인덱서는 정수 값으로 인덱싱할 필요가 없고, 별도의 인덱싱된 값을 찾는 메커니즘을 정의하여 사용해도 무방하다.
인덱서는 오버로드될 수 있도 있고 2차원 배열에 액세스하는 경우 둘 이상의 매개 변수를 사용할 수 있다.
인덱서를 정의할 때 사용되는 키워드에 대한 내용은 아래와 같다.
this : 인덱서 임을 정의
get : 값을 반환할 때 필요한 내용을 구현하는 부분
set : 값을 할당할 때 필요한 내용을 구현하는 부분
value : set 접근자가 할당하려는 값을 정의
아래 코드는 get과 set 접근자를 사용하여 인덱서를 정의하는 방법에 대한 예제다.
private Dictionary<string, int> dir = new Dictionary<string, int>();
public int this[string i]
{
get { return dir[i]; }
set { dir[i] = value; }
}
C# 6 부터는 읽기 전용 인덱서를 다음 예제와 같이 구현할 수 있다.
private int[] arr = new int[10];
public int this[int i] => arr[i];
C# 7부터는 get과 set 접근자 모두를 바꿔 구현할 수 있다.
private int[] arr = new int[10];
public int this[int i]
{
get => arr[i];
set => arr[i] = value;
}
인덱서를 사용하는 방법은 다음과 같다.
var item = indexer["Key1"];
indexer["Key2"] = item;
인덱서에는 유효한 모든 접근 제한자를 사용할 수 있고 sealed, virtual 또는 abstract일 수 있다. 속성과 마찬가지로, 인덱서의 get 및 set 접근자에 대해 다양한 접근 제한자를 지정할 수 있다.
참고 :
https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/indexers/
https://learn.microsoft.com/ko-kr/dotnet/csharp/indexers
'C#' 카테고리의 다른 글
[C#] implicit, explicit(명시적 및 암시적 변환 연산자) (0) | 2023.12.26 |
---|---|
[C#] Null 허용 값 형식('T?')과 Null 병합 연산자('??' , '??=') (1) | 2023.12.20 |
[C#] Override & New & Sealed (0) | 2023.03.02 |