본문 바로가기

C#

C# 문법- INDEXER (FEAT PROPERTY)

반응형

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp15
{
    class TESTINT
    {
        private int[] array = new int[6];
        public int this[int index]
        {
            get { return array[index]; }
            set { array[index] = value; }
        }
    }
    class TEST
    {
        private string[] _array = new string[5];
        public string this[int index]
        {
            get { return _array[index]; }
            set { _array[index] = value; }
        }
        static void Main(string[] args)
        {
            TEST atest = new TEST();
            atest[0] = " 할룽a";
            atest[1] = " 할룽b";
            atest[2] = " 할룽c";
            atest[3] = " 할룽d";
            atest[4] = " 할룽e";
            Console.WriteLine(atest[2]);

            //배열을 다루는 클래스를 만드는거

            TESTINT atestint = new TESTINT();
            atestint[0] = 4562;
            atestint[1] = 2456;
            atestint[2] = 6245;
            atestint[3] = 5624;
            atestint[4] = 4562;
            atestint[5] = 2456;
            Console.WriteLine(atestint[5]);

        }
    }
}

C# Indexer

C# Indexer는 클래스 객체의 데이타를 배열 형태로 인덱스를 써서 엑세스할 수 있게 해준다. 즉, 클래스 객체는 배열이 아님에도 불구하고, 마치 배열처럼 []를 사용하여 클래스 내의 특정 필드 데이타를 엑세스하는 것이다. 다음은 Indexer를 이용하여 문자 데이타를 클래스 객체에 넣은 예이다.

 

 


 

C# 인덱서 정의

C# Indexer는 특별한 문법인 this[ ] 를 써서 클래스 속성(Property)처럼 get과 set을 정의한다. 클래스 내부의 어떤 데이타를 리턴하는지는 클래스 디자인시 필요에 따라 정하게 될 것이고, 리턴 데이타 타입도 여러 가지로 지정할 수 있다.

입력 파라미터인 인덱스도 여러 데이타 타입을 쓸 수 있는데, 주로 int 나 string 타입을 사용하여 인덱스값을 주는 것이 일반적이다. 아래 예제는 간단한 인덱서 예로서, int 인덱스를 받아 배열의 데이타를 찾아 정수를 리턴하는 예이다.


using System;
using System.Runtime.InteropServices;

namespace ConsoleApp15
{
    
    public class PropertyTest
    {
        public string _name;
        public string GetName() //메소트를 통한 캡슐화!
        {
            return _name;
        }
        public void SetName(string value)
        {
            _name = value;
        }
       
        
        public string NAME { get; set; } // 프로퍼티 라고 부른다.

    }
   
    class TESTINT
    {
        private int[] array = new int[6];
        public int this[int index]
        {
            get { return array[index]; }
            set { array[index] = value; }
        }
    }
    class TEST
    {
        private string[] _array = new string[5];
        public string this[int index]
        {
            get { return _array[index]; }
            set { _array[index] = value; }
        }
        static void Main(string[] args)
        {
            TEST atest = new TEST();
            atest[0] = " 할룽a";
            atest[1] = " 할룽b";
            atest[2] = " 할룽c";
            atest[3] = " 할룽d";
            atest[4] = " 할룽e";
            Console.WriteLine(atest[2]);

            //배열을 다루는 클래스를 만드는거

            TESTINT atestint = new TESTINT();
            atestint[0] = 4562;
            atestint[1] = 2456;
            atestint[2] = 6245;
            atestint[3] = 5624;
            atestint[4] = 4562;
            atestint[5] = 2456;
            Console.WriteLine(atestint[5]);

            PropertyTest pt = new PropertyTest();
            pt.NAME = "헬로 키티";       // set 작동 
            Console.WriteLine(pt.NAME);  // get 작동
            //데이터를 객체지향으로 캡슐화하고 안전하게 보관 ! 
        }
    }
}

 !

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp17
{
    class CAR
    {
        public string name;
    }
    class TESTcar
    {
        private CAR[] array = new CAR[5];

        public CAR this [int index]
        {
            get {return array[index]; }
            set { array[index] = value; }
        }
        static void Main(string[] args)
        {
            TESTcar tESTcar = new TESTcar();
            tESTcar[0] = new CAR();
            tESTcar[1] = new CAR();

            tESTcar[0].name = "비오는 날에는 소시지빵";
            tESTcar[1].name = "게임은 폭력적이야";
            Console.WriteLine(tESTcar[1].name);

        }
    }
}
반응형