美文网首页
25、索引器

25、索引器

作者: Peuimporte | 来源:发表于2021-11-04 08:28 被阅读0次

    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. 索引器概述:

    • 使用索引器可以用类似于数组的方式为对象建立索引。

    • get 取值函数返回值。 set取值函数分配值。

    • this关键字用于定义索引器。

    • value 关键字用于定义由 set 索引器分配的值。

    • 索引器不必根据整数值进行索引;由你决定如何定义特定的查找机制。

    • 索引器可被重载。

    • 索引器可以有多个形参,例如当访问二维数组时。

    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; 
                } 
            }
        }
    

    相关文章

      网友评论

          本文标题:25、索引器

          本文链接:https://www.haomeiwen.com/subject/pvffzltx.html