a、 属性可以调用方法就如同他们是公共数据成员,而索引器可以调用对象上得方法,如同对象是一个数组。
b、 属性可以通过简单的名称访问, 而索引器需要通过索引器访问。
c、 属性可以为静态成员或者实例成员,而索引器必须是实例成员。
d、 属性的get访问器没有参数, 而索引器上的get访问器具有与索引器相同的形参表。
e、 属性的set访问器包含隐式value参数,而对于索引器,除了value参数外,索引器的set访问器还具有与索引器相同的形参表。
索引器使得对象可按照与数组相似的方法进行索引,索引器可被重载,当访问二维数组时可以有多个形参;索引器不必根据整数值进行索引,由你决定如何定义特定的查找机制;要声明类或结构上的索引器,请使用this关键字。
using System; using System.Collections.Generic; using System.Text; namespace Index { class sample<T> //这个类告诉我们如何使用客户端代码索引器 { private T[] arr = new T[100]; public T this[int i] //索引器的签名由其形参的数量和类型组成。 { get { return arr[i];} set { arr[i] = value;} } } class IndexerClass { private int[] arr = new int[100]; //定义数组 public int this[int index] //索引器声明 { get { if (index < 0 || index >100) return 0; return arr[index]; } set { if (!(index < 0 || index > 100)) arr[index] = value; } } } class String_index { string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" }; private int GetDay(string testday) { int i = 0; foreach(string day in days) { if (day == testday) return i; i++; } return -1; } public int this[string day] { get{ return GetDay(day); } } } class Program { static void Main(string[] args) { sample<string> string_value = new sample<string>(); string_value[0] = "Hello world"; System.Console.WriteLine(string_value[0]); IndexerClass test = new IndexerClass(); //调用索引器初始化第2、4个数据 test[3] = 123; test[5] = 1024; for (int i = 0; i <= 10; i++ ) { System.Console.WriteLine("数据为#{0} = {1}", i, test[i]);} String_index week = new String_index(); System.Console.WriteLine("这是一周的第{0}天", week["Tues"]); Console.ReadKey(); } } }