프로그래밍 언어/C#

C# 인덱서 (Indexer)

ShovelingLife 2022. 7. 19. 09:54

인덱서는 인덱스를 이용해 객체 내의 데이터에 접근하게 해주는 프로퍼티이다.

 

인덱서를 선언하는 방법

class 클래스이름
{
    // 한정자 인덱서형식 this[형식 인덱스식별자]
    {
        get
        {
            // 인덱스식별자를 이용하여 내부 데이터 반환
        }
        set
        {
            // 인덱스식별자를 이용하여 내부 데이터 저장
        }
    }
}

인덱서는 프로퍼티처럼 식별자를 따로 가지지는 않는다. 프로퍼티는 이름을 통해 객체 내의 데이터에 접근하지만 인덱서는 인덱스를 통해 객체 내의 데이터에 접근한다.

인덱서의 선언 예

인덱서를 통해 정수 형식 배열 array에 접근한다. 인덱서를 통해 데이터를 저장할 때 인덱스보다 배열의 크기가 작다면 배열의 크기를 인덱스에 맞춰 재 조정하는 코드이다.

class MyList
{
    private int[] array;

    public MyList()
    {
        array = new int[3];
    }

    // 인덱서
    public int this[int index]
    {
        get
        {
            return array[index];
        }

        set
        {
            if(index >= array.Length)
            {
                Array.Resize<int>(ref array, index + 1);
                Console.WriteLine("Array Resized: {0}",array.Length);
            }

            array[index] = value;
        }
    }
}

인덱서 예제

using System;

namespace Indexer
{
    class MyList
    {
        private int[] array;

        public MyList()
        {
            array = new int[3];
        }

        // 인덱서
        public int this[int index]
        {
            get
            {
                return array[index];
            }

            set
            {
                if(index >= array.Length)
                {
                    Array.Resize<int>(ref array, index + 1);
                    Console.WriteLine("Array Resized: {0}",array.Length);
                }

                array[index] = value;
            }
        }

        public int Length
        {
            get
            {
                return array.Length;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyList list = new MyList();
            for (int i = 0; i < 5; i++)
                list[i] = i; // 배열을 다루듯 사용

            for (int i = 0; i < list.Length; i++)
                Console.WriteLine(list[i]);   // 데이터를 얻어올 때도 인덱스를 사용    
        }
    }
}

 

출처 : https://qzqz.tistory.com/210