MS 프로그래밍 가이드 : 인덱서 사용
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/indexers/using-indexers
# 무엇인가요
간단히 말해서 클래스 내부에 있는 특정 값들을 배열처럼 접근 가능하게 해준다. 프로퍼티와 많은 부분에서 유사.
구문을 간소화하여 클래스와 해당 용도를 다른 개발자가 이해하기 쉽게 만든다.
# 사용 방법
아래와 같이 this 키워드를 사용하여 구현.
public int this[int index] // Indexer declaration
{
// get and set accessors
}
프로퍼티와 비슷하게 Get과 Set을 사용한다. set은 제한적으로 사용하길 바람.
public float this[int index]
{
get
{
return temps[index];
}
set
{
temps[index] = value;
}
}
# 주의 사항
배열처럼이라고 말했지만, 매개 변수 형식은 정수로 제한 되지않는다.
string이든 object든 원하는 값을 함수처럼 받는다.
반드시 인스턴스 멤버로만 존재. static을 사용할 수 없다.
인덱서는 오버로드도 가능하다. (즉, 두 개 이상의 매개변수를 받을 수 있다)
# 사용 예시
아래와 같이 메인 관리자가 존재할 때,
public class BGDataManager : PersistentSingleton<BGDataManager>
{
public TalkEntity TalkEntity { get; set; }
protected override void AwakeAfter()
{
TalkEntity = new TalkEntity();
}
}
TalkEntity 라는 Class는 GetTalkString(string)으로 특정 값을 반환한다.
public class TalkEntity
{
readonly Dictionary<string, string> talkTextDic = new Dictionary<string, string>();
public string GetTalkString(string groupKey)
{
talkTextDic.TryGetValue(groupKey, out string talkTextSts);
Debug.Assert(talkTextSts != null, $"키 [{groupKey}]가 존재하지않음");
return talkTextSts;
}
}
때문에 해당 값을 받아오기 위해서는 Manager에 접근 -> TalkEntity에 접근 -> 함수 호출의 형태로 진행된다.
var texts = BGDataManager.Inst.TalkEntity.GetTalkString(key);
# 인덱서를 사용하여 구현하는 경우
아래와 같이 this 키워드를 써서 구현한다.
public class TalkEntity
{
readonly Dictionary<string, string> talkTextDic = new Dictionary<string, string>();
public string this[string groupKey]
{
get
{
talkTextDic.TryGetValue(groupKey, out string talkTextSts);
Debug.Assert(talkTextSts != null, $"키 [{groupKey}]가 존재하지않음");
return talkTextSts;
}
}
}
사용하는 쪽에서는 아래와 같이 짧아졌다!
var texts = BGDataManager.Inst.TalkEntity[key];
'🌍 C# Study > C# 케이스 스터디' 카테고리의 다른 글
C# 상속 클래스 부모의 생성자 호출 순서 (0) | 2021.04.26 |
---|---|
C# 배열 연속 데이터 채우기 Enumerable.Range (0) | 2021.04.23 |
C# Collection Foreach 에서 원소 삭제하기 (0) | 2019.12.15 |
C# params 키워드 : 가변 개수의 인수 (0) | 2019.12.13 |
Construct (생성자) 오버로딩 (0) | 2019.12.12 |