Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!시작하기

Microsoft. NET 을 시작하는 분들을 위한 강좌입니다. 주로 기초적인 내용과 때론 기본적인 내용을 다룹니다

Indexer (인덱서)

작성자 : 박종명
최초 작성일 : 2008-05-30 (금요일)
최종 수정일 : 2008-05-30 (금요일)
조회 수 : 3189

Indexer 는 객체를 배열처럼 사용할 수 있게 한다
객체가 배열이나 해쉬 테이블 처럼 복수의 값을 가지는 멤버를 가지고 있다면 이 멤버에 대한
액세스를 인덱스로 정의하면 내부 멤버를 숨긴채 배열과 유사하게 액세스 시킬 수 있다.
또한 인덱스는 오버로딩이 가능하기 때문에 서로 다른 멤버에 대한 동일한 방식의 액세스를 가능케 해 준다
 
* 인덱서 사용예
1. 인덱서를 구현하는 클래스



2. 인덱서 사용하기



인덱서를 사용하기 코드를 보면 객체를 배열과 유사한 형태로 사용하고 있음을 알 수 있다.
단 배열은 배열의 위치값으로 정수타입만 사용할 수 있지만 인덱스는 그에 대한 제한이 없는 차이가 있긴 한다.
 
 
* 인덱서의 특징
1. 인덱서는 정수 타입 외의 첨자를 사용할 수 있다 (배열과 다른점 이다)

2. 오버로딩 가능(인덱스 역시 메소드 이기 때문에)

3. 인덱서는 값이 아니다. 즉  인덱서는 메모리 주소를 가지지 않는다 따라서 ref나 out 키워드를 사용한 파라메타
    전달을 할 수 없다
 
4. void 형을 사용할 수 없다(메쏘드 와의 차이점)

5. static 로 선언될수 없다
    인덱서의 키워드는 this 이다. 결국 클래스가 인스턴스화(객체) 되었을 때 만이 가능한 것이다.
 
 
* string 클래스의 인덱서
닷넷 프레임워크의 string 클래스도 인덱서를 구현하고 있다. 아래와 같이 string 클래스의 인덱서를 사용 할 수 있다.
 
string s = "mkex";

char c = s[1];// <- 'k' 가 반환된다. 
 
그러나 아래와 같이 값의 설정의 불가능 하다.

s[1] = "t"
 
String 클래스는 immutable 클래스 이다.  즉, 변경되지 않는 읽기 전용 이다.
따라서 get 인덱서만을 지원하는 것이다.
아래 처럼...
 

class String{
 public char this[int index]{
  get {
   if(index < 0 || index >= Length)
    throw new ArgumentOutOfRangeException();
   ...
  }
 }
}

이름
비밀번호
홈페이지
YB <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요