728x90
반응형

Indexer는 속성 + 배열 역핳을 한다.

 

개념

인덱스 : 색인

  • 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘
  • 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록

 

역할

  • 클래스 내의 배열 또는 컬렉션을 외부에서 접근할 수 있도록 하는 역할
  • 키워드 (속성형식(get, set, return, value) + 배열형식(this[int index])
  • 사용방법 (1. 배열과 같이 사용, 2. 객체명[인덱스] = 값 또는 변수; 3. 변수 = 객체명[인덱스];) 

 

형식

  • 기본 형식
[접근 한정자] 데이터형 this[int index]
{
    set{}
    get{}
}

 

예제

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ex
{
    class A
    {
        private int[] number = new int[5];
        public int this[int index] // 배열 number을 다루기 위해 필요한 인덱서
        {
            get { return number[index]; }
            set { number[index] = value; }
        }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            A test = new A();
            for (int i = 0; i < 5; i++)
            {
                test[i] = i;                // set 동작
                Console.WriteLine(test[i]); // get 동작
            }
        }
    }
}

 

인덱서 사용

  • 컬렉션 ArrayList

 

예제

using System;
using System.IO;
using System.Collections;

namespace ex
{
    class A
    {
        ArrayList List = new ArrayList(); //ArrayList가 객체이기 때문에 new를 통해서 생성함

        public string this[int index]
        {
            get
            {
                if (index >= 0 && index < List.Count)
                    return (string)List[index];
                else
                    return null; // 해당되는 값이 없다.
            }
            set
            {
                if (index >= 0 && index < List.Count) // index가 0보다 같거나 크고 List.Count보다 작을때
                    List[index] = value; // 입력된 값을 해당되는 index를 통해서 List 안에 넣어준다.
                else
                    List.Add(value);
            }
            
        }
        public void Print()
        {
            foreach(string m in List) // [읽기전용] 처음부터 끝까지
            {
                Console.WriteLine(m);
            }
        }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            A test = new A(); // 배열로 생성하지않았음에도 사용가능
            test[0] = "A";
            test[1] = "B";
            test[2] = "C";
            test[3] = "D";

            test.Print();
            test[1] = "Hello World!";
            test.Print();
        }
    }
}
// 컬렉션의 메소드를 추가하지 않고도 가능

 

정리

  • 속성

- 외부에서 접근하기 어려운 private, protected 멤버변수를 외부에서 사용할 수 있도록 하기 위함

- 변수 수준

 

  • 인덱서

- 멤버 중에서 배열 또는 컬렉션 등을 속성 형식으로 외부에서 사용할 수 있도록 하기 위함

- 속성 + 배열 = 인덱서

728x90
반응형

+ Recent posts