인덱서는 클래스 또는 구조체의 인스턴스가 배열처럼 인덱싱되도록 허용합니다. 클래스에 대한 인덱서를 정의하면 클래스는 배열 접근자 '[]'를 사용할 수 있습니다. 인덱서는 속성과 유사하지만 인덱서는 매개변수를 취합니다. (인덱서도 접근자(특수 메소드)를 통해 구현되는 클래스의 속성이라고 생각할 수도 있습니다.)
좀 더 명확하게 설명하자면, 대학은 인생에서 가장 여유로운 시간입니다. 학생들은 한때 하고 싶었지만 여러 가지 이유로 하지 못했던 많은 일을 할 수 있습니다. .. 수업을 빼먹는 행위를 막기 위해 수업시간마다 선생님은 이름이나 학생번호를 불러요. 저는 4반이에요. 선생님은 학생번호를 '4반 1번'으로 부르는 걸 좋아해요. "에게..." ", "4반 2반", "4반 3반"... "3번. 동창.", "HC666 선생님이 배가 아파서 가셨어요 오늘은 병원." (안녕하세요 차이나. 룸메이트 ^_^), "아, 4번"... 선생님의 점호는 4반의 지표입니다.
class4가 Classes 클래스에 의해 인스턴스화된 객체로 간주되고, class[1]이 동급생 1번의 인덱스인 경우(배열을 생각하면 이해될 것입니다) 그렇다면 어떻게 구현합니까?
인덱서 정의:
위에서 언급한 것처럼 인덱서는 속성과 유사합니다. 당연히 인덱서도 클래스의 구성원이므로 당연히 필요합니다. 다음과 같이 클래스에 정의되어 있어야 합니다.
public 返回值类型 this[参数类型 参数] { get { return 参数指定的值; } //get访问器 set { /*设置参数指定的值 */ } //set访问器 }
인덱서 인스턴스:
위의 예를 다음과 같이 코딩합니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义一个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号\t"+class4[j]); } } } }
결과 :
인덱서 오버로드:
위 프로그램에서는 학번을 통해 학생 이름 인덱스를 얻었으므로 학번을 얻는 방법은 무엇입니까? 모직 옷감이라는 이름을 통해 색인을 생성합니까? 우리는 인덱스를 특별한 방법으로 간주합니다. 이 방법은 다양한 매개변수로 동일한 기능을 달성하기 위해 오버로드를 사용할 수 있으므로 인덱서가 자연스럽게 오버로드될 수 있습니다. 사용법은 메소드 오버로딩과 유사합니다(메서드 오버로딩을 보려면 여기를 클릭하세요). 이번에는 이름 인덱스를 사용하여 학생 번호를 가져와야 합니다.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定义一个能被索引的类 class Classes {//对类的索引实质是对类中数组的索引 public string[] StudentName=new string[6]; //定义索引器 public string this[int ID] { get { return StudentName[ID]; } set { StudentName[ID] = value; } //set访问器自带value参数 } //重载索引器参数设为string类型 public uint this[string name] { get { //找到与name匹配的学号 uint index=1; while (StudentName[index] != name && index < 6) { index++; } return index; } set { } } } class Program { static void Main(string[] args) { Classes class4 = new Classes(); //索引写入 for (int i = 1; i < 6; i++) { class4[i] = "HC"+i; } //索引读出,通过学号索引出姓名 for (int j = 1; j < 6; j++) { Console.WriteLine(j+"号\t"+class4[j]); } //通过姓名索引出学号 for (int k = 1; k < 6; k++) { string name="HC"+k; Console.WriteLine(name+"\t"+class4[name]+"号");//对比上面用法一样参数不一样 } } } }
결과:
위에서 클래스가 인덱서를 정의하면 클래스가 배열로 처리될 수 있다고 말했습니다. 배열에 대해 배울 때 배열은 여러 차원을 가지며 인덱서는 위치에 있다는 것을 알고 있습니다. 수업은 어떻습니까? ? 배열을 순회하는 데 사용하는 foreach 순회 문을 이 클래스에도 사용할 수 있나요? ? 다음 글에서 소개할게요! ! (학교에 정전이 되니...) 앞으로도 HC666에 많은 응원 부탁드립니다^_^
위는 C# 학습일지 28---인덱서, 오버로드 인덱서 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!