저는 C#을 잘 알고 있지만 저에게는 이상한 점이 있습니다. 일부 오래된 프로그램에서이 코드를 보았습니다 :'this'키워드를 속성으로 사용합니다.
public MyType this[string name]
{
......some code that finally return instance of MyType
}
어떻게 호출됩니까? 이것의 사용은 무엇입니까?
저는 C#을 잘 알고 있지만 저에게는 이상한 점이 있습니다. 일부 오래된 프로그램에서이 코드를 보았습니다 :'this'키워드를 속성으로 사용합니다.
public MyType this[string name]
{
......some code that finally return instance of MyType
}
어떻게 호출됩니까? 이것의 사용은 무엇입니까?
이것은 indexer입니다. 선언 한 후에는 다음과 같이 할 수 있습니다.
class MyClass
{
Dictionary<string, MyType> collection;
public MyType this[string name]
{
get { return collection[name]; }
set { collection[name] = value; }
}
}
// Getting data from indexer.
MyClass myClass = ...
MyType myType = myClass["myKey"];
// Setting data with indexer.
MyType anotherMyType = ...
myClass["myAnotherKey"] = anotherMyType;
이것은 Indexer Property입니다. 배열, 목록 또는 사전에 액세스하는 것과 같은 방법으로 색인을 사용하여 클래스에 직접 "액세스"할 수 있습니다. 귀하의 경우에는
, 당신은 뭔가를 할 수 :
public class MyTypes
{
public MyType this[string name]
{
get {
switch(name) {
case "Type1":
return new MyType("Type1");
case "Type2":
return new MySubType();
// ...
}
}
}
}
그런 다음 사용할 수있을 것 같은 :
MyTypes myTypes = new MyTypes();
MyType type = myTypes["Type1"];
그것은 일반적으로 컬렉션 타입 클래스로 사용 인덱서,이다 .
인덱서이라는 특수한 속성입니다. 이렇게하면 클래스처럼 배열에 액세스 할 수 있습니다.
myInstance[0] = val;
배열 - 구문에서와 같이 키 값으로 식별 할 수있는 수집, 일반적으로 자신의 위치에있는 요소에 액세스하기위한 잘 알려진 인터페이스 (같이 당신은, 사용자 지정 컬렉션에 가장 자주이 동작을 볼 수
배열 및 목록) 또는 논리적 키 (사전 및 해시 테이블에서와 같이)를 사용합니다.
인덱서에 대한 자세한 내용은 MSDN 문서 Indexers (C# Programming Guide)에서 확인할 수 있습니다.
".... some code"블록에 접근자를 가져 오는 속성을 표시하면이 대답이 더 완벽 할 것입니다. 이것은 그것이 더 많은 방법과 같다고 제안합니다. –
감사합니다. 답변을 업데이트했습니다. –
그리고 대부분의 사람들의 요구를 포괄하는 일반적인 컬렉션을 구축함으로써 훨씬 덜 공통적입니다. 더 이상 표준 동작을 수행하기 위해 강력한 형식의 컬렉션을 작성할 필요가 없습니다. –