정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 인덱서(Indexer)

TwinParadox 2017. 1. 14. 00:30
728x90

인덱서(Indexer)


인덱서는 값들의 목록이나 사전을 캡슐화하는 클래스나 구조체에서 특정값에 자연스러운 구문으로 접근하기 위한 기능을 제공하는 멤버

Property와 유사하나, 이름이 아니라 색인 변수를 통해 접근함

인덱서를 사용하는 구문은 배열 사용 구문과 유사하나, 정수 이외 형식도 색인으로 사용 가능

적용할 수 있는 수정자는 property의 것들과 동일함


string 클래스에는 문자열을 구성하는 특정 문자의 char 값에 int 색인을 통해서만 접근할 수 있게 하는 인덱서가 존재


class IndexerText
{
	string[] test = "This is Text Code".Split();
	
	public string this [int wordNum] // Indexer
	{
		get { return words [wordNum]; }
		set { words [wordNum] = value; }
	}
}


- 구현


인덱서를 작성할 때 this라는 이름으로 속성을 선언하되, [] 안에 색인 매개변수를 지정


IndexerTest it = new IndexerTest();
Console.WriteLine(it[3]); // Code
it[3] = "SourceCode";
Console.WriteLine(it[3]); // SourceCode


하나의 타입에 여러 개의 인덱서를 둘 수 있으나,

인덱서마다 매개변수의 형식이 달라야 함.


set 접근자를 생략하면 읽기 전용(read-only) 인덱서가 되며,

C# 6.0에서는 아래와 같은 표현식을 본문으로 지정해 인덱서를 간결히 정의할 수 있음.


public string this [int wordNum] => words [wordNum];



- CLR 인덱서


컴파일러는 내부적으로 인덱서를 get_Item 메서드와 set_Item 메서드로 바꾸어 컴파일


public string get_Item (int wordNum) {...}
public void set_Item (int wordNum, string value) {...}


728x90

'정리가 필요한 카테고리(추후 정리) > C#,Unity' 카테고리의 다른 글

C#] nameof  (0) 2017.01.17
C#] 상수(Constant)  (0) 2017.01.15
C#] 속성(Property  (0) 2017.01.13
C#] 인스턴스 생성자  (0) 2017.01.12
C#] namespace 규칙  (0) 2017.01.09