-
C#의 인덱서 구현 프로세스 모음
C# 언어의 가장 흥미로운 측면 중 하나는 클래스 인덱서입니다. 간단히 말해서, 소위 인덱서는 배열처럼 자신의 클래스를 참조할 수 있는 특별한 유형의 속성입니다. 분명히 이 기능은 컬렉션 클래스를 생성할 때 특히 유용하지만, 대용량 파일을 처리하거나 특정 제한된 리소스를 추상화하는 등의 다른 상황에서는 클래스에서 배열과 유사한 동작을 갖는 것도 매우 유용합니다. 이 문서에서는 인덱서를 사용하도록 클래스를 설정하는 과정을 안내합니다. 하지만 먼저 몇 가지 필요한 배경을 제공하기 위해 속성의 개념을 개략적으로 살펴보겠습니다.
속성 VB6에서 프로그램을 작성한 적이 있다면 속성 메서드에 대해 잘 알고 있어야 합니다. 소위 속성 메서드는 실제로 전용 클래스 필드에 대한 제어된 액세스를 구현하는 특수 클래스 멤버입니다. C# 언어에는 두 가지 속성 메서드가 있습니다. 하나는 private 필드의 값을 반환할 수 있는 get이고, 두 번째는 private 필드의 값을 설정할 수 있는 set입니다. 예를 들어, 다음 코드를 예로 들면 FirstName 속성이 생성되어 프라이빗 클래스 멤버 firstname에 대한 액세스를 제어합니다.
클래스 사람 {
개인 문자열 이름;
공개 문자열 FirstName {
{이름을 반환;} 받기
{이름 = 값;} 설정
}
}
속성 선언은 다음과 같이 인코딩될 수 있습니다.
사람 p = 새로운 사람();
p.FirstName = "라몬트";
Console.WriteLine (p.FirstName);
보시다시피 특성 선언은 Microsoft에 따르면 소위 접근자라고 하는 두 개의 특수 멤버도 선언한다는 점을 제외하면 도메인 선언과 더 비슷합니다. get access 함수는 표현식 오른쪽에서 속성이 호출되거나 해당 속성이 다른 서브루틴(또는 함수)의 매개변수로 사용될 때 호출됩니다. 반대로, 표현식 왼쪽에서 속성이 호출되고 프라이빗 필드 값이 값 매개 변수를 암시적으로 전달하여 설정되면 액세스 설정 함수가 호출됩니다. set 접근자 함수를 생략하여 읽기 전용 속성을 만들 수 있으므로 속성을 설정하려고 하면 컴파일 오류가 발생합니다.
인덱서 사용의 이점
아래는 그 구조이다
<수정자> <반환 유형> this [인수 목록]
...{
얻다
...{
// 코드 가져오기가 여기에 표시됩니다.
}
세트
...{
// 여기에 설정 코드가 들어갑니다.
}
}
메모:
modifier: 비공개, 공개, 보호 또는 내부 등의 수정자
this: 참조 클래스의 현재 인스턴스를 나타내는 C#의 특수 키워드입니다. 여기서는 현재 클래스의 인덱스를 의미합니다.
인수 목록: 인덱서의 매개변수를 나타냅니다.
긴 이야기를 마치고 화제를 돌려보자면 왜 내가 이 원을 돌아야 하는가? 실제로 이는 클래스의 인덱서가 속성과 매우 유사하기 때문이며 코드 관점에서도 마찬가지입니다. 다음은 문자열을 반환하는 인덱서가 있는 클래스의 예입니다.
클래스 샘플 {
공개 문자열 this [int index] {
get {return "통과했습니다" + index }
}
}
여기서 속성 이름은 클래스의 현재 인스턴스를 다시 참조하는 것이며 매개변수 목록은 괄호 대신 대괄호로 묶여 있습니다. 또한 이는 읽기 전용 인덱서입니다. 읽기/쓰기 형태로 변경하기 위해 접근권한 설정 기능을 추가했습니다. 인덱서를 정의할 때 반드시 하나의 매개변수만 사용할 필요는 없습니다. 인덱서 매개 변수는 모든 유형이 될 수 있지만 일반적으로 int가 가장 적합한 유형입니다. 동일한 클래스에 둘 이상의 인덱서(오버로드됨)가 있을 수도 있습니다.
위와 같이 Sample 클래스를 정의한 후 아래와 같이 인덱서를 기본 속성으로 사용할 수 있습니다.
샘플 s = 새로운 샘플();
Console.WriteLine(s[55]);
속성 및 인덱서 속성과 인덱서에는 몇 가지 차이점이 있습니다.
클래스의 각 특성에는 고유한 이름이 있어야 하며, 클래스에 정의된 각 인덱서에는 고유한 서명 또는 매개 변수 목록이 있어야 합니다(인덱서 오버로드를 구현할 수 있도록).
속성은 정적일 수 있으며 인덱서는 인스턴스 멤버여야 합니다.
인덱서에 대해 정의된 액세스 함수에는 인덱서에 전달된 매개 변수에 액세스할 수 있는 반면 속성 액세스 함수에는 매개 변수가 없습니다.
인터페이스의 배열과 유사한 동작은 프로그램 구현자가 선호하는 경우가 많으므로 인터페이스에 대한 인덱서를 정의할 수도 있습니다. IList 및 IDictionary 컬렉션 인터페이스 모두 저장된 항목에 액세스하기 위한 인덱서를 선언합니다.
인터페이스에 대한 인덱서를 선언할 때 선언은 인덱서의 존재만을 나타냅니다. 범위 수정자를 포함하지 않고 적절한 액세스 기능만 제공하면 됩니다. 다음 코드는 IImplementMe 인터페이스의 일부로 인덱서를 선언합니다.
인터페이스 IIimplementMe {
문자열 this[int index]
{
얻다;
세트;
}
해당 구현 클래스는 IimplementMe의 인덱서에 대한 get 및 set 액세스 함수를 구체적으로 정의해야 합니다.
이것이 인덱서의 기본 개요입니다. 이제 개발에서 인덱서의 역할을 더 잘 이해하게 되었습니다.
클래스 SampleCollection
{
개인 T[] arr = 새로운 T[100];
공개 T this[int i]
{
얻다
{
반환 arr[i];
}
세트
{
arr[i] = 값;
}
}
}
// 이 클래스는 클라이언트 코드가 인덱서를 사용하는 방법을 보여줍니다.
수업 프로그램
{
정적 무효 Main(string[] args)
{
SampleCollection
stringCollection[0] = "안녕하세요, 세계";
System.Console.WriteLine(stringCollection[0]);
}
}
이 기사는 CSDN 블로그에서 가져온 것입니다. 재인쇄할 때 출처를 표시하십시오: http://blog.csdn.net/licheng19891020/archive/2009/12/09/4974516.aspx
-