2010-03-25 3 views
12

저는 C#을 잘 알고 있지만 저에게는 이상한 점이 있습니다. 일부 오래된 프로그램에서이 코드를 보았습니다 :'this'키워드를 속성으로 사용합니다.

public MyType this[string name] 
{ 
    ......some code that finally return instance of MyType 
} 

어떻게 호출됩니까? 이것의 사용은 무엇입니까?

답변

25

이것은 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; 
+0

".... some code"블록에 접근자를 가져 오는 속성을 표시하면이 대답이 더 완벽 할 것입니다. 이것은 그것이 더 많은 방법과 같다고 제안합니다. –

+0

감사합니다. 답변을 업데이트했습니다. –

+0

그리고 대부분의 사람들의 요구를 포괄하는 일반적인 컬렉션을 구축함으로써 훨씬 덜 공통적입니다. 더 이상 표준 동작을 수행하기 위해 강력한 형식의 컬렉션을 작성할 필요가 없습니다. –

6

이것은 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"]; 
2

인덱서이라는 특수한 속성입니다. 이렇게하면 클래스처럼 배열에 액세스 할 수 있습니다.

myInstance[0] = val; 
배열 - 구문에서와 같이 키 값으로 식별 할 수있는 수집, 일반적으로 자신의 위치에있는 요소에 액세스하기위한 잘 알려진 인터페이스 (같이 당신은, 사용자 지정 컬렉션에 가장 자주이 동작을 볼 수

배열 및 목록) 또는 논리적 키 (사전 및 해시 테이블에서와 같이)를 사용합니다.

인덱서에 대한 자세한 내용은 MSDN 문서 Indexers (C# Programming Guide)에서 확인할 수 있습니다.

관련 문제