zoukankan      html  css  js  c++  java
  • C#索引器

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。 

    1、索引器的定义

    C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

    定义索引器的方式与定义属性有些类似,其一般形式如下:

    [修饰符] 数据类型 this[索引类型 index]

    {

        get{//获得属性的代码}                                                 

        set{ //设置属性的代码}

    }

    修饰符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

    数据类型是表示将要存取的数组或集合元素的类型。

    索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串;this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。 例如:

    /// <summary>
        /// 索引器根据索引获取或设置该位置的值,只可存放100个
        /// </summary>
        class CIndex
        {
            //声明一个可以容纳100个字符串的数组
            private string[] array = new string[100];
    
            /// <summary>
            /// 索引器根据索引获取或设置该位置的值
            /// </summary>
            /// <param name="index"></param>
            /// <returns></returns>
            public string this[int index]
            {
                get 
                {
                    if (index < 0 || index >= 100)
                        return string.Empty;
                    else
                        return array[index];
                }
                set 
                {
                    if (index >= 0 && index < 100)
                        array[index] = value;
    
                }
            }
        }

    2、索引器的使用

    通过索引器可以存取类的实例的数组成员,操作方法和数组相似,一般形式如下:

    对象名[索引]

    其中索引的数据类型必须与索引器的索引类型相同。例如:

    static void Main(string[] args)
            {
                CIndex arr = new CIndex();
                arr[0] = "My name is";
                arr[1] = " Jason Divas ";
    
                Console.WriteLine(arr[0] + arr[1]);
                Console.ReadKey();
            }


    表示先创建一个对象CIndex再通过索引来引用该对象中的数组元素

    3、接口中的索引器

    在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get或set均不能省略;如果只读的,省略set访问器;如果是只写的,省略get访问器。

    例如:

    public interface IAddress
    {
    string this[int index]{get;set;}
    string Address{get;set;}
    string Answer();
    }


     表示所声明的接口IAddress包含3个成员:一个索引器、一个属性和一个方法,其中,索引器是可读写的。

    4、索引器与属性的比较 

    索引器与属性都是类的成员,语法上非常相似。索引器一般用在自定义的集合类中,通过使用索引器来操作集合对象就如同使用数组一样简单;而属性可用于任何自定义类,它增强了类的字段成员的灵活性。

                        属        性                                            索  引  器

     允许调用方法,如同公共数据成员

    允许调用对象上的方法,如同对象是一个数组

     可通过简单的名称进行访问

     可通过索引器进行访问

     可以为静态成员或实例成员

     必须为实例成员

     其get访问器没有参数

     其get访问器具有与索引器相同的形参表

     其set访问器包含隐式value参数

     除了value参数外,其set访问器还具有与索引器相同的形参表



  • 相关阅读:
    爬取1907条『课程学习』数据,分析哪类学习资源最受大学生青睐
    以『B站』为实战案例!手把手教你掌握爬虫必备框架『Scrapy』
    python爬取各类基金数据,以『动图可视化』方式展示基金的涨跌情况
    详细实战教程!部署Flask网站+域名访问+免费https证书
    王者荣耀白晶晶皮肤1小时销量突破千万!分析网友评论我发现了原因
    python爬取『大年初一』热映电影,以『可视化及词云秀』方式带你了解热映电影...
    python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!
    Nanopore sequencing and assembly of a human genome with ultra-long reads
    Genome Sequencing and Assembly by Long Reads in Plants
    SiLiCO: A Simulator of Long Read Sequencing in PacBio and Oxford Nanopore
  • 原文地址:https://www.cnblogs.com/raphael5200/p/5114858.html
Copyright © 2011-2022 走看看