티스토리 뷰

반응형

 

인덱서란 클래스나 구조체의 인스턴스를 배열처럼 사용할 수 있는 방법을 말한다. 인덱싱된 값은 다양한 형태의 매개 변수를 사용하여 반환하거나 할당할 수 있다. 이러한 인덱서는 매개 변수를 사용한다는 점을 제외하면 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

 

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday
글 보관함
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31