C#索引器

一、C#索引器

C#的索引器是一种特殊的类成员,它允许类和结构的实例按照与数组相同的方式进行索引,索引器的访问器可以使用参数,被称为有参属性。

当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

1. 索引器的声明

声明索引器的语法格式如下:

修饰符 数据类型 this[索引类型名称 参数名]
{
    get{//取数据}
    set{//存数据}
}

?修饰符:可以使用的修饰符有new、public、protected、internal、private、virtual、sealed、override和abstract等。

?数据类型:将要存取的数组或集合元素的类型。
?this:用于定义索引器。表示操作本对象的数组或集合成员,可以简单地把它理解为索引器的名字,因此用户不能定义索引器的名称。

索引类型名称:表示该索引器使用哪一种类型的索引来存取数组或集合元素。可以是整型、也可以是字符串。

?参数名:参数的名称。

?大括号:“{}”之间是索引值的访问声明,使用get关键字(返回值)和set关键字(分配值)定义了对被索引的元素的读写权限。set索引器中的value关键字用于定义由set索引器分配的值。

索引器不必根据整数值进行索引,而且索引器可以被重载。

2. 索引器的使用

索引器的操作方法和数组类似,通过索引器可以存取类的实例的数组成员。

一般格式如下:

对象名[索引]其中索引的数据类型必须与索引器的索引类型相同。如:
 
A a = new A();
a[0] = 100;
a[1] = 101;
Console.WriteLine(a[0]);
Console.WriteLine(a[1]);表示先创建一个对象a,再通过索引来引用该对象中的数组元素。

二、索引器和属性的比较

另外,所有适用于属性的规则,都可以用于索引器。

三、示例

示例一
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        class classTest
        {
            private long[] arr = new long[100]; // 私有数组
            public long this[int index]         // 索引器,包含形参index
            {
                get                             // get访问器
                {
                    return arr[index];
                }
                set                             // set访问器
                {
                    arr[index] = value;
                }
            }
        }
        static void Main(string[] args)
        {
            // C#索引器-www.baike369.com
            classTest classTest1 = new classTest();
            classTest1[0] = 100;
            classTest1[1] = 101;
            Console.WriteLine(classTest1[0]);
            Console.WriteLine(classTest1[1]);
            Console.ReadLine();
        }
    }
}

运行结果:
 
100
101

示例二
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{
    class Program
    {
        class classTest<T>                // 定义一个泛型类
        {
            private T[] arr = new T[100]; // 私有数组
            public T this[int i]          // 索引器,包含形参i
            {
                get                       // get访问器
                {
                    return arr[i];
                }
                set                       // set访问器
                {
                    arr[i] = value;
                }
            }
        }
        static void Main(string[] args)
        {
            classTest<string> classTest1 = new classTest<string>();
            classTest1[0] = "Hello, World";
            Console.WriteLine(classTest1[0]);
            Console.ReadLine();
        }
    }
}

运行结果:

Hello, World

原文地址:https://www.cnblogs.com/melao2006/p/4239266.html