KeiStory

C# Indexer 사용하기

 

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;
                }
            }
        }
    }
}

결과

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band