zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    第一期站立会议7(11.21 个人)
    第一期站立会议6(11.20 个人)
    第一期站立会议5(11.19个人)
    第一期站立会议4(11.18个人)
    第一期站立会议3(11.17个人)
    第一期站立会议2(11.16个人)
    第一期站立会议1(11.15 个人)
    第二阶段第三次站立会议
    对第一阶段提出意见的总结及改进方案
    第二阶段第二次站立会议
  • 原文地址:https://www.cnblogs.com/melao2006/p/4239266.html
Copyright © 2011-2022 走看看