인덱서 (Indexer)
2021. 6. 17. 22:43
728x90
[ 인덱서 ]
인덱서(Indexer) : 색인 (속성+배열)
역할 : class 내의 배열,컬렉션을 외부에서 접근할 수 있도록 하는 역할
형식 : 속성 형식(get, set, return, value) + 배열 형식(this[int index])
// 방법1
객체명[index] = 값 또는 변수; //값을 배열의 해당 index 위치에 저장 (set)
// 방법2
변수 = 객체명[index]; //해당 index의 값을 변수에 저장 (get)
정확한 사용 형식은 아래와 같다 :
[접근한정자] 데이터형 this[int index]{
get{ }
set{ }
} //외부로부터 받아온 값을 set, 인덱서 배열에 저장된 값을 외부로 전달 get
[ 속성 vs. 인덱서 ]
- 공통점 : 객체의 멤버 변수를 read, write함
- 차이점 : 속성은 변수, 인덱서는 배열 형태임
[ 인덱서 예시 ]
배열 사용
class A {
private int[] number = new int[5];
public int this[int index]{
get{ return number[index]; }
set{ number[index] = value; }
}
}
class Program{
static void Main(string[] args){
A test = new A();
for(int ii = 0; ii<5 ; ii++){
test[ii] = ii; //set. 변수test를 배열로 선언하지 않았지만 class A에 indexer가 있기 때문에 배열형으로 사용 가능
Console.WriteLine(test[ii]); //get
}
}
}
컬렉션 사용
using System.Collections;
...
class A{
ArrayList list = new ArrayList(); //접근한정자는 자동으로 private으로 설정됨
public string this[int index]{
get{
if(index >= 0 && index < list.Count) return (string)list[index];
else return null;
}
set{
if(index >= 0 && index < list.Count) list[index] = value;
elseif(index == list.Count) list.Add(value);
}
}
}
public void Print(){
foreach(string m in list){
Console.WriteLine(m);
}
}
class Program{
static void Main(string[] args){
A test = new A();
test[0] = "A"; // test[].~ 형태가 아니가 '='을 이용하므로 indexer임을 알 수 있음
test[1] = "B";
...
test.Print();
test[1] = "Hello World";
test.Print(); // "B"대신 윗 줄이 출력됨
}
}
728x90
'C# > C# 문법' 카테고리의 다른 글
속성(Property) (0) | 2021.06.17 |
---|---|
다형성 (Polymorphism) (0) | 2021.06.17 |
오버라이드(Override), 오버로드 (Overload) (0) | 2021.06.17 |
상속(Inheritance), 추상클래스(Abstract Class) (0) | 2021.06.17 |
파일 입출력 (0) | 2021.06.15 |