首页 > 代码库 > C#中索引

C#中索引

using System;using System.Collections;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace NETTest{    /**     * 索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。 索引器经常是在主要用于封装内部集合或数组的类型中实现的。     * 索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。     * 索引器和数组比较:     * (1)索引器的索引值(Index)类型不受限制     * (2)索引器允许重载     * (3)索引器不是一个变量     * 索引器和属性的不同点     * (1)属性以名称来标识,索引器以函数形式标识     * (2)索引器可以被重载,属性不可以     * (3)索引器不能声明为static,属性可以     * 索引器值不属于变量;因此,不能将索引器值作为 ref 或 out 参数进行传递。     * **/    public class IndexClass    {        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 interface ISomeInterface    {        // Indexer declaration:        int this[int index]        {            get;            set;        }    }    // Implementing the interface.    public class IndexerClass : ISomeInterface    {        private int[] arr = new int[100];        public int this[int index]   // indexer declaration        {            get            {                // The arr object will throw IndexOutOfRange exception.                return arr[index];            }            set            {                arr[index] = value;            }        }    }}
 static void Main(string[] args)        {            //第一种索引器的使用            IndexClass indexer = new IndexClass();            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["王五"]);            Console.WriteLine();            IndexerClass test = new IndexerClass();            System.Random rand = new System.Random();            // Call the indexer to initialize its elements.            for (int i = 0; i < 10; i++)            {                test[i] = rand.Next();            }            for (int i = 0; i < 10; i++)            {                System.Console.WriteLine("Element #{0} = {1}", i, test[i]);            }            Console.ReadLine();        }

 

C#中索引