2009-11-19 4 views
7

에서 나는 클래스 자체가 배열 것처럼 클래스 내 컬렉션을 액세스 할 수있게 인덱서를 이해합니다.C 번호 - 인덱서의 의미있는 응용 프로그램

우리가 프로젝트를 개발 중이라고 가정 할 때, 그러한 인덱서의 실제적인 사용법 (예를 들어 도움이 될 수있는)은 어디에 적합합니까?

답변

8

예를 들어 프레임 워크에서 거의 모든 컬렉션 클래스를 살펴보십시오.

object o = table.getvalue(key); 

는 인덱서 다소 간단한 구문을 허용 여기서 : 나는 인덱서없이 언어의 해시 테이블에서 항목을 검색 할 수 있다면, 내가 좋아하는 구문을 사용

object o = table[key]; 

(의도적으로 무시하고 입력/제네릭 문제) 위의 예제에서

5

프레임 워크 자체의 제네릭 컬렉션에는 몇 가지 예가 있습니다. 사전 꽤 좋은 예입니다

Dictionary<string, User> Users; 

Users["Jorge"].ResetPassword(); 

Users.GetElementByKey("Jorge").ResetPassword(); 
1

음보다 훨씬 우아하고 단순한 것, 인덱서를 사용하기위한 명백한 응용 프로그램은 ... (놀라운) 모음입니다.

예를 들면 :

  • 목록 :

    list[4] 
    
  • 해시 테이블 :

    table["foo"] 
    table[Color.Black] 
    

인덱서가 인수를 정수로 제한되지 않습니다 것을 기억하십시오.

2

다른 개발자가 사용할 Microsoft .NET Framework (실제로 "실제 프로젝트")를 개발 중이라고 가정 해보십시오. 배열처럼 작동하지만 동적으로 크기가 조절되는 클래스를 작성해야합니다 (List<T> 클래스). 인덱서없이, 당신이 얻을 수있는 두 가지 방법을 쓰고 요소를 설정할 수 있습니다 :

public T get(int index) { ... } 
public void set(int index, T value) { ... } 
// (Java advocates: no offense intended) 

이 라이브러리의 사용자가 두 번째 요소를 증가하고자하는 가정을. 그녀는 작성해야 : 인덱서와

list.set(1, list.get(1) + 1); 

을, 구문 이해하기, 훨씬 더 간단 더 읽기, 그리고 쉽게 :

list[1]++; 

(비슷한 인수가 Dictionary<TKey,TValue> 같은 것들을 적용 ...)

0

컬렉션이 정렬 된 경우 첫 번째 요소와 마지막 요소가 최소 또는 최대 요소를 가져 오는 데 유용 할 수 있습니다.

ASP.닷넷에는 응용 프로그램, 세션 및 요청과 같은 인덱서를 사용하는 여러 객체가 있습니다.

3

인덱서 자체가 배열했다 클래스처럼 클래스 내에서 모음에 액세스 할 우리가 수 있습니다. 그 사실이지만

, 당신은 하지는 자체 내에서 항목의 영구 컬렉션을 가지고있는 클래스를 작성하지만, 여전히 색인 할 때 동적으로 계산 된 값을 제공 할 할 수 있습니다. 데이터는 인터넷이나 다른 데이터 소스 (예 : SearchResults 클래스)에서 Console.out.WriteLine(SearchResults["Stackoverflow"].count)과 같은 문자열에 대한 Google 검색 결과를 얻는 데 사용할 수있는 실시간 데이터로 수집 될 수 있습니다. 그것은 데이터 을 수집 할 때에만을 요청하고 검색된 항목의 모음을 반환합니다.