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
그리드형