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;
}
}
}
}
내부의 data 배열을 접근할수 있도록 하기위해 This[] 속성을 이용하여 data 객체를 접근하도록 하였습니다.
사용은 아래처럼 Class 정의후 index 로 접근하여 사용할 수 있습니다.
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] 이렇게 사용하면 내부 data 객체접근해 data[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;
}
}
}
}
}
결과
C# Liquid Template 사용한 동적 쿼리 만들기 - Fluid (0) | 2024.03.05 |
---|---|
C# ArvoConvert 사용하기 (0) | 2024.03.04 |
C# NATS 를 이용해 Streaming Server 구성하기 (0) | 2024.03.03 |
C# Quartz Scheduler 사용하기 - Cron 표기법 사용 (0) | 2024.02.29 |
C# IDataReader 를 이용해 List<T> 로 변환해서 사용하는 방법 (0) | 2024.02.27 |