C#
[C#] Indexer
kjun.kr
2023. 10. 17. 19:03
728x90
728x170
Indexer는 클래스 내부의 배열 데이터 접근 시 클래스 객체를 마치 배열 데이터 형태로 사용할 수 있게 해 줍니다.
즉 Class [0] 이런 식으로 사용하여 내부 배열객체에 접근을 가능하게 합니다.
this []를 써서 Property로 정의하여 내부 배열 데이터를 관리하도록 정의하면 됩니다.
아래는 그 예시입니다.
Class를 아래처럼 정의합니다.
class MyClass
{
// 정수 10개의 배열 공간
private int[] data = new int[10];
// 인덱서 정의. int 파라미터 사용
public int this[int index]
{
get
{
if (index < 0 || index >= 10)
{
// 범위를 벗어난 경우
throw new IndexOutOfRangeException();
}
else
{
// 정수배열로부터 값 반환
return data[index];
}
}
set
{
if (!(index < 0 || index >= 10))
{
// 정수배열에 값 저장
data[index] = value;
}
}
}
}
아래처럼 사용합니다.
internal class Program
{
static void Main(string[] args)
{
// Indexer
MyClass myClass = new MyClass();
// 인덱서에 값 설정
myClass[1] = 2048;
myClass[9] = 1024;
// 인덱서 설정된 값 반환
int oneValue = myClass[1];
int nineValue = myClass[9];
}
}
myClass [1] 이렇게 사용하여 내부 배열 객체에 접근하여 값을 저장하고 반환할 수 있습니다.
전체코드
namespace CSharpStudy
{
internal class Program
{
static void Main(string[] args)
{
// Indexer
MyClass myClass = new MyClass();
// 인덱서에 값 설정
myClass[1] = 2048;
myClass[9] = 1024;
// 인덱서 설정된 값 반환
int oneValue = myClass[1];
int nineValue = myClass[9];
Console.WriteLine("myClass[1] : " + oneValue);
Console.WriteLine("myClass[9] : " + nineValue);
Console.ReadKey();
}
}
class MyClass
{
// 정수 10개의 배열 공간
private int[] data = new int[10];
// 인덱서 정의. int 파라미터 사용
public int this[int index]
{
get
{
if (index < 0 || index >= 10)
{
// 범위를 벗어난 경우
throw new IndexOutOfRangeException();
}
else
{
// 정수배열로부터 값 반환
return data[index];
}
}
set
{
if (index >= 0 && index < 10)
{
// 정수배열에 값 저장
data[index] = value;
}
}
}
}
}
결과
728x90
그리드형