목표
Indexer
- 인덱서는 인덱싱된 속성, 즉 하나 이상의 인수로 참조된 속성을 사용할 수 있게 한다.
- 프로퍼티 동일한 언어 기능을 기반으로 동작한다.
- 프로퍼티는 접근자를 통해 데이터에 접근하고, 인덱스는 인덱스(index)를 통해 접근한다.
class {클래스}
{
{접근자} {인덱서} this[{타입} {인덱스}]
{
get
{
// 데이터 읽기
}
set
{
// 데이터 쓰기
}
}
}
Indexer 예시
- 아래는 간단한 인덱서의 예시이다.
- 인덱서에 사용되는 엑데스는 int 뿐만 아니라, string 등으로 다양하게 응용할 수 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ScoreData
{
public List<int> score = new List<int>();
public int this[int index]
{
get
{
if(index < 0)
{
throw new System.IndexOutOfRangeException("Cannot index less than 0.");
}
else if(index >= score.Count)
{
throw new System.IndexOutOfRangeException("Index Out Of Range.");
}
return score[index];
}
set
{
if (index < 0)
{
throw new System.IndexOutOfRangeException("Cannot index less than 0.");
}
else if (index > score.Count)
{
throw new System.IndexOutOfRangeException("Index Out Of Range.");
}
else if (index == score.Count)
{
score.Add(value);
}
else
{
score[index] = value;
}
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SampleScript : MonoBehaviour
{
ScoreData scoreData = new ScoreData();
// Start is called before the first frame update
void Start()
{
scoreData[0] = 1;
scoreData[0] = 2;
scoreData[1] = 3;
Debug.Log(scoreData[0]);
Debug.Log(scoreData[1]);
//Debug.Log(scoreData[2]);
}
// Update is called once per frame
void Update()
{
}
}