• C#:索引


    1. 什么是索引

    索引是一组get和set访问器,类似于属性的访问器。

    2. 索引和属性

    • 和属性一样,索引不用分配内存来存储
    • 索引和属性都主要被用来访问其他数据成员,这些成员和它们关联,它们为这些成员提供设置和获取访问:(1)属性通常是访问单独的数据成员;(2)缩影通常是访问多个数据成员
    • 索引可以只有一个访问器,也可以两个都有
    • 索引总是实例成员,因此,索引不能被声明为static
    • 和属性一样,实现get和set访问器的代码不必一定关联到某个字段或属性。这段代码可以做任何事情或者什么也不做,只要get访问器返回某个指定类型的值即可

    3. 声明索引

    • 索引没有名称,在名称的位置是关键字this
    • 参数列表在方括号中间
    • 参数列表中至少必须声明一个参数

    4. 两个索引的示例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication11
    {
        class Employee
        {
            public string LastName;
            public string FirstName;
            public string CityOfBirth;
    
            public string this[int index]
            {
                set
                {
                    switch (index)
                    {
                        case 0: LastName = value;
                            break;
                        case 1: FirstName = value;
                            break;
                        case 2: CityOfBirth = value;
                            break;
                        default:
                            throw new ArgumentOutOfRangeException("Index");
                    }
                }
    
                get
                {
                    switch (index)
                    {
                        case 0: return LastName;
                        case 1: return FirstName;
                        case 2: return CityOfBirth;
                        default: throw new ArgumentOutOfRangeException("Index");
                    }
                }
            }
        }
    
        class Example
        {
            int Temp0;
            int Temp1;
            public int this[int index]
            {
                get
                {
                    return (0 == index) ? Temp0 : Temp1;
                }
                set
                {
                    if (0 == index)
                    {
                        Temp0 = value;
                    }
                    else
                    {
                        Temp1 = value;
                    }
                }
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Employee emp1 = new Employee();
    
                emp1[0] = "Doe";
                emp1[1] = "Jane";
                emp1[2] = "Dallas";
                Console.WriteLine("{0}", emp1[0]);
                Console.WriteLine("{0}", emp1[1]);
                Console.WriteLine("{0}", emp1[2]);
    
                Example a = new Example();
                a[0] = 15;
                a[1] = 20;
                Console.WriteLine("Values--T0:{0}, T1:{1}", a[0], a[1]);
    
                Console.ReadLine();
            }
        }
    }

    5. 索引重载
    只要索引的参数列表不同,类可以有不止一个索引。

        class MyClass
        {
            public string this[int index]
            {
                get
                {
                    return "Testing";
                }
                set
                { }
            }
    
            public string this[int index1, int index2]
            {
                get
                {
                    return "Testing";
                }
                set
                { }
            }
    
            public int this[float index]
            {
                get
                {
                    return 3;
                }
                set
                { }
            }
        }


    6. 访问器的访问修饰符

    默认情况下,成员的两个访问器有和成员自身相同的访问级别。在特定情况下,成员的访问器可以有不同的访问级别。

    • 仅当成员既有get访问器也有set访问器时,其访问器才能有访问修饰符
    • 虽然两个访问器都必须出现,但它们中只能有一个访问修饰符
    • 访问器的访问修饰符必须比成员的访问级别有更严格的限制性
  • 相关阅读:
    遮罩层可滚动
    toggle函数
    48.判断文本中回车的数量
    47.输出26个字母
    46.@弹出点击次数
    44.@鼠标点击页面中的任意标签,alert该标签的名称
    43.对象深度克隆
    UIscrollView 多图滑动 frame与bounds的区别比较
    累却真心充实 杂感
    delegate
  • 原文地址:https://www.cnblogs.com/LilianChen/p/3358970.html
Copyright © 2020-2023  润新知