25、索引器

2021-11-04  本文已影响0人  Peuimporte

1. 简介:

索引器允许类或结构的实例就像数组一样进行索引。写法上类似属性。

2. 语法:

关键字符: this[]

     class IndexTest
    {
        private int[] arrayInts = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
        
        public int this[int index]
        {
            get { return arrayInts[index]; }
            set { arrayInts[index] = value; }
        }
    }

    // 使用该类
    class Program
    {
        static void Main(string[] args)
        {
            IndexTest test = new IndexTest();
            Console.WriteLine(test[5]); // 6
            Console.ReadKey();
        }
    }

3. 索引器概述:

4. 索引器其他用法:

1> 索引器可以有多个形参,例如多维数组的用法。

         public int this[int index, int index2]
        {
            get
            {
                if (index >= arrayInts.Length)
                {
                    throw new Exception("索引超出了界线");
                }
                else
                {
                    return arrayInts[index];                    
                }
                
            }
            set { arrayInts[index] = value; }
        }

        // 调用:
        static void Main(string[] args)
        {
            IndexTest test = new IndexTest();
            Console.WriteLine(test[12,6]); 
            Console.ReadKey();
        }

2> C# 并不将索引类型限制为整数。 例如,对索引器使用字符串可能是有用的。 通过搜索集合内的字符串并返回相应的值,可以实现此类索引器。

案例说明:在此例中,声明了存储星期几的类。 声明了一个 get 访问器,它接受字符串(天名称),并返回相应的整数。 例如,星期日将返回 0,星期一将返回 1,等等。

       class DayCollection
        {
            string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };

            // This method finds the day or returns -1
            private int GetDay(string testDay)
            {

                for (int j = 0; j < days.Length; j++)
                {
                    if (days[j] == testDay)
                    {
                        return j;
                    }
                }

                throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");
            }

            // The get accessor returns an integer for a given string
            public int this[string day]
            {
                get
                {
                    return (GetDay(day));
                }
            }
        }

        class Program
        {
            static void Main(string[] args)
            {
                DayCollection week = new DayCollection();
                System.Console.WriteLine(week["Fri"]);

                // Raises ArgumentOutOfRangeException
                System.Console.WriteLine(week["Made-up Day"]);

                // Keep the console window open in debug mode.
                System.Console.WriteLine("Press any key to exit.");
                System.Console.ReadKey();
            }
        }
        // Output: 5
 // Output: 5

泛型类跟索引器

    //A继承自Program,并且泛型T,需要是一个引用类型,并且泛型类,需要遵守IComparable接口
    class A<T> : Program where T : class, IComparable<T>
    {
        private T[] list;
        public T this[int index]
        {
            get 
            { 
                return list[index]; 
            } 
            set 
            { 
                list[index] = value; 
            } 
        }
    }
上一篇下一篇

猜你喜欢

热点阅读