인덱서(Indexer)는 C#에서 도입한 새로운 형태의 클래스 멤버로, Object은 Array만큼 편리하고 직관적으로 에서 참조할 수 있습니다. 인덱서는 속성과 매우 유사하지만 인덱서는 매개변수 목록을 가질 수 있고 클래스에 직접 작용하지 않고 인스턴스 객체에만 작용할 수 있습니다. 인덱서를 정의하는 클래스를 사용하면 배열처럼 액세스할 수 있습니다. [ ] Operator는 클래스 멤버에 액세스합니다. (물론 인덱서를 통한 배열 매핑 등 고급 응용프로그램도 많이 있습니다.)
인덱서는 클래스나 구조체의 인스턴스를 배열처럼 인덱싱할 수 있도록 해줍니다. 인덱서는 해당 값이 함수에서 매개 변수를 사용한다는 점을 제외하면 속성 과 유사합니다. 인덱서를 사용하면 클래스 또는 구조체의 인스턴스를 배열과 동일한 방식으로 인덱싱할 수 있습니다. 인덱서 액세스에 매개변수가 사용된다는 점을 제외하면 인덱서는 속성과 유사합니다.
인덱서 개요
인덱서 및 배열 비교:
(1) 인덱서의 인덱스 값(Index) 종류는 제한되지 않는다
(2) 인덱서는 오버로딩을 허용한다
인덱서 차이점 속성에서
(1) 속성은 이름으로 식별되고 인덱서는 함수로 식별됩니다 (2) 인덱서는 오버로드될 수 있지만 속성은 불가능합니다. (3) 인덱서는 정적, 속성은 간단한 인덱서 예시using System;
using System.Collections;
public class IndexerClass
{
private string[] name = new string[2];
//索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
public string this[int index]
{
//实现索引器的get方法
get
{
if (index < 2)
{
return name[index];
}
return null;
}
//实现索引器的set方法
set
{
if (index < 2)
{
name[index] = value;
}
}
}
}
public class Test
{
static void Main()
{
//索引器的使用
IndexerClass Indexer = new IndexerClass();
//“=”号右边对索引器赋值,其实就是调用其set方法
Indexer[0] = "张三";
Indexer[1] = "李四";
//输出索引器的值,其实就是调用其get方法
Console.WriteLine(Indexer[0]);
Console.WriteLine(Indexer[1]);
}
}
일 수 있습니다.
인덱서에 액세스하려면 문자열 을 첨자로 사용하세요
public class IndexerClass { //用string作为索引器下标的时候,要用Hashtable private Hashtable name = new Hashtable(); //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象 public string this[string index] { get { return name[index].ToString(); set { name.Add(index, value); } } } public class Test { static void Main() { IndexerClass Indexer = new IndexerClass(); Indexer["A0001"] = "张三"; Indexer["A0002"] = "李四"; Console.WriteLine(Indexer["A0001"]); Console.WriteLine(Indexer["A0002"]); } }
인덱서 오버로딩
public class IndexerClass { private Hashtable name = new Hashtable(); //1:通过key存取Values public string this[int index] { get { return name[index].ToString(); } set { name.Add(index, value); } } //2:通过Values存取key public int this[string aName] { get { //Hashtable中实际存放的是DictionaryEntry(字典)类型,如果要遍历一个Hashtable,就需要使用到DictionaryEntry foreach(DictionaryEntry d in name) { if (d.Value.ToString() == aName) { return Convert.ToInt32(d.Key); } } return -1; } set { name.Add(value, aName); } } } public class Test { static void Main() { IndexerClass Indexer = new IndexerClass(); //第一种索引器的使用 Indexer[1] = "张三";//set访问器的使用 Indexer[2] = "李四"; Console.WriteLine("编号为1的名字:" + Indexer[1]);//get访问器的使用 Console.WriteLine("编号为2的名字:" + Indexer[2]); Console.WriteLine(); //第二种索引器的使用 Console.WriteLine("张三的编号是:" + Indexer["张三"]);//get访问器的使用 Console.WriteLine("李四的编号是:" + Indexer["李四"]); Indexer["王五"] = 3;//set访问器的使用 Console.WriteLine("王五的编号是:" + Indexer["王五"]); } }
다중 매개변수 인덱서
using System; using System.Collections; //入职信息类 public class EntrantInfo { //姓名、编号、部门 private string name; private int number; private string department; public EntrantInfo() { } public EntrantInfo(string name, int num, string department) { this.name = name; this.number = num; this.department = department; } public string Name { get { return name; } set { name = value; } } public int Num { get { return number; } set { number = value; } } public string Department { get { return department; } set { department = value; } } } //声明一个类EntrantInfo的索引器 public class IndexerForEntrantInfo { private ArrayList ArrLst;//用于存放EntrantInfo类 public IndexerForEntrantInfo() { ArrLst = new ArrayList(); } //声明一个索引器:以名字和编号查找存取部门信息 public string this[string name, int num] { get { foreach (EntrantInfo en in ArrLst) { if (en.Name == name && en.Num == num) { return en.Department; } } return null; } set { //new关键字:C#规定,实例化一个类或者调用类的构造函数时,必须使用new关键 ArrLst.Add(new EntrantInfo(name, num, value)); } } //声明一个索引器:以编号查找名字和部门 public ArrayList this[int num] { get { ArrayList temp = new ArrayList(); foreach (EntrantInfo en in ArrLst) { if (en.Num == num) { temp.Add(en); } } return temp; } } //还可以声明多个版本的索引器... } public class Test { static void Main() { IndexerForEntrantInfo Info = new IndexerForEntrantInfo(); //this[string name, int num]的使用 Info["张三", 101] = "人事部"; Info["李四", 102] = "行政部"; Console.WriteLine(Info["张三", 101]); Console.WriteLine(Info["李四", 102]); Console.WriteLine(); //this[int num]的使用 foreach (EntrantInfo en in Info[102]) { Console.WriteLine(en.Name); Console.WriteLine(en.Department); } } }
위 내용은 C#의 인덱서에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!