728x90
반응형
Indexer는 속성 + 배열 역핳을 한다.
개념
인덱스 : 색인
- 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘
- 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록
역할
- 클래스 내의 배열 또는 컬렉션을 외부에서 접근할 수 있도록 하는 역할
- 키워드 (속성형식(get, set, return, value) + 배열형식(this[int index])
- 사용방법 (1. 배열과 같이 사용, 2. 객체명[인덱스] = 값 또는 변수; 3. 변수 = 객체명[인덱스];)
형식
- 기본 형식
[접근 한정자] 데이터형 this[int index]
{
set{}
get{}
}
예제
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace ex
{
class A
{
private int[] number = new int[5];
public int this[int index] // 배열 number을 다루기 위해 필요한 인덱서
{
get { return number[index]; }
set { number[index] = value; }
}
}
public class Program
{
public static void Main(string[] args)
{
A test = new A();
for (int i = 0; i < 5; i++)
{
test[i] = i; // set 동작
Console.WriteLine(test[i]); // get 동작
}
}
}
}
인덱서 사용
- 컬렉션 ArrayList
예제
using System;
using System.IO;
using System.Collections;
namespace ex
{
class A
{
ArrayList List = new ArrayList(); //ArrayList가 객체이기 때문에 new를 통해서 생성함
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) // index가 0보다 같거나 크고 List.Count보다 작을때
List[index] = value; // 입력된 값을 해당되는 index를 통해서 List 안에 넣어준다.
else
List.Add(value);
}
}
public void Print()
{
foreach(string m in List) // [읽기전용] 처음부터 끝까지
{
Console.WriteLine(m);
}
}
}
public class Program
{
public static void Main(string[] args)
{
A test = new A(); // 배열로 생성하지않았음에도 사용가능
test[0] = "A";
test[1] = "B";
test[2] = "C";
test[3] = "D";
test.Print();
test[1] = "Hello World!";
test.Print();
}
}
}
// 컬렉션의 메소드를 추가하지 않고도 가능
정리
- 속성
- 외부에서 접근하기 어려운 private, protected 멤버변수를 외부에서 사용할 수 있도록 하기 위함
- 변수 수준
- 인덱서
- 멤버 중에서 배열 또는 컬렉션 등을 속성 형식으로 외부에서 사용할 수 있도록 하기 위함
- 속성 + 배열 = 인덱서
728x90
반응형
'C# > C#으로 살아남기_나우캠퍼스_이태성강사' 카테고리의 다른 글
[C# 언어 11강] 델리게이트(Delegate) (0) | 2021.12.30 |
---|---|
[C# 언어 10강] 배열/속성/인덱서 비교 (0) | 2021.12.30 |
[C# 언어 9강] 속성(Property) (0) | 2021.12.29 |
[C# 언어 8강] 클래스(2/2) 객체 생성 및 사용, 클래스 참조와 this (0) | 2021.03.09 |
[C# 언어 8강] 클래스(1/2) 개요, 클래스 형식과 접근 한정자 (0) | 2021.03.09 |