一、索引器,类似于数组,它可以让你在实例化之后像数组一样通过索引调用对象,但是又和数组不同:
1、索引器可以重载;
2、索引器的[index]值类型不受限制;
3、索引器不是一个变量。
二、索引器和属性也相像,但是又和属性不同:
1、属性以名称来标识,索引器以函数形式来标识,即索引器可以有参数列表;
2、属性不可以重载,索引器可以;
3、属性可以声明为static,索引器不可以。
Main方法:
class Indexer { static void Main(string[] args) { //索引器的简单示例 IndexerClassDemo indexer = new IndexerClassDemo();
//索引器重载示例 IndexerReloadClassDemo indexerReload = new IndexerReloadClassDemo();
//索引器多参示例 IndexerParamtersClassDemo indexerParamters = new IndexerParamtersClassDemo(); //索引器赋值 indexer[0] = "Zhangs"; indexer[1] = "Lis"; indexer["Demo001"] = "Demo001"; indexer["Demo002"] = "Demo002"; indexerReload[0] = "Relaod001"; indexerReload[1] = "Relaod002"; indexerReload["Relaod003"] = 3; indexerParamters["Ls", "Xi'an"] = 17; //输出索引器的值,其实就是调用其get方法。 Console.WriteLine(indexer[0]); Console.WriteLine(indexer["Demo002"]); Console.WriteLine(indexerReload["Relaod003"].ToString()); Console.WriteLine(indexerParamters["Ls", "Xi'an"]); Console.ReadKey(); } }
索引器的简单示例:
/// <summary> /// 简单应用实例 /// </summary> public class IndexerClassDemo { //所引起必须以 this 关键字定义,其实这个 this 就是实例化后的对象 private string[] name = new string[2]; public string this[int index] { //实现所引起的get方法 get { if (index < 3) { return name[index]; } return null; } //实现所引起的set方法 set { name[index] = value; } } private Hashtable ht = new Hashtable(); public string this[string index] { get { return ht[index].ToString(); } set { ht.Add(index, value); } } }
索引器的重载示例:
/// <summary> /// 索引器的重载 /// </summary> public class IndexerReloadClassDemo { //所引起必须以 this 关键字定义,其实这个 this 就是实例化后的对象 private Hashtable ht = new Hashtable(); public string this[int indexReload] { get { return ht[indexReload].ToString(); } set { ht.Add(indexReload, value); } } public int this[string name] { get { foreach (DictionaryEntry de in ht) { if (de.Value.ToString() == name) { return Convert.ToInt32(de.Key); } } return -1; } set { ht.Add(value, name); } } }
索引器多参示例:
/// <summary> /// 多参索引器 /// </summary> public class IndexerParamtersClassDemo { private ArrayList al; public IndexerParamtersClassDemo() { al = new ArrayList(); } public int this[string name, string addr] { get { foreach (PersonInforMessage info in al) { if (info.Name == name && info.Addr == addr) { return info.Age; } } return -1; } set { al.Add(new PersonInforMessage(name, addr, Convert.ToInt32(value))); } } } public class PersonInforMessage { private string name; private string addr; private int age; public PersonInforMessage(string name, string addr, int age) { this.name = name; this.addr = addr; this.age = age; } public string Name { get { return name; } set { name = value; } } public string Addr { get { return addr; } set { addr = value; } } public int Age { get { return age; } set { age = value; } } } }