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访问器时,其访问器才能有访问修饰符
  • 虽然两个访问器都必须出现,但它们中只能有一个访问修饰符
  • 访问器的访问修饰符必须比成员的访问级别有更严格的限制性

posted on 2013-10-09 12:30  LilianChen  阅读(975)  评论(0编辑  收藏  举报

导航