深入理解C#索引器(一种支持参数的属性)与属性的对比

 更新时间:2013年06月05日 15:33:33   作者:  
本篇文章是对C#索引器(一种支持参数的属性)与属性的对比进行了详细的分析介绍,需要的朋友参考下
索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。
1、索引器的定义
C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。
定义索引器的方式与定义属性有些类似,其一般形式如下:时,索引器//this表示的是操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,所以,当相同类型的时候,记得通过参数区分。
复制代码 代码如下:

//[修饰符] 数据类型 this[索引类型 index]
{
    get{//获得属性的代码} 
    set{ //设置属性的代码}
}


复制代码 代码如下:

public int this [int index]
{
    get{}
    set{}
}

具体例子如下:
复制代码 代码如下:

class Z
{
        //可容纳100个整数的整数集
        private long[] arr = new long[100];
        //声明索引器
        public long this[int index]
        {
            get
            { //检查索引范围
                if (index < 0 || index <= 100)
                {
                    return 0;
                }
                else
                {
                    return arr[index];
                }
            }
            set
            {
                if (!(index < 0 || index <= 0))
                {
                    arr[index] = value;
                }
            }
   }

2、索引器的使用
通过索引器可以存取类的实例的数组成员,操作方法和数组相似,一般形式如下:
对象名[索引]
修饰符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern,其中索引的数据类型必须与索引器的索引类型相同。例如:
复制代码 代码如下:

Z  z=new  z();
z[0]=100;
z[1]=101;
Console.WriteLine(z[0]);//表示先创建一个对象z,再通过索引来引用该对象中的数组元素。

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访问器还具有与索引器相同的形参表

相关文章

  • C#判断字符编码的方法总结(六种方法)

    C#判断字符编码的方法总结(六种方法)

    这篇文章主要介绍了C#判断字符编码的方法,结合实例形式总结分析了六种C#判断字符编码的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 使用C#调用百度地图并实现坐标点的设置以及读取示例

    使用C#调用百度地图并实现坐标点的设置以及读取示例

    这篇文章主要介绍了使用C#调用百度地图并实现坐标点的设置以及读取示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • C#实现基于链表的内存记事本实例

    C#实现基于链表的内存记事本实例

    这篇文章主要介绍了C#实现基于链表的内存记事本,实例分析了C#基于链表实现的记事本功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#访问C++动态分配的数组指针(实例讲解)

    C#访问C++动态分配的数组指针(实例讲解)

    下面小编就为大家分享一篇C#访问C++动态分配的数组指针(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C# VB 实现10进制 16进制之间互相转换

    C# VB 实现10进制 16进制之间互相转换

    如何将10进制转成16进制,又如何将16进制数转成10进制,本文将介绍C#和VB实现代码,需要了解的朋友可以参考下
    2012-11-11
  • C#获取客户端相关信息实例总结

    C#获取客户端相关信息实例总结

    这篇文章主要介绍了C#获取客户端相关信息的方法,以实例形式总结了C#获取客户端IP地址、网络连接、硬件信息等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09
  • C#导出数据到excel如何提升性能

    C#导出数据到excel如何提升性能

    这篇文章主要介绍了C#导出数据到excel如何提升性能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 轻松学习C#的抽象类

    轻松学习C#的抽象类

    轻松学习C#的抽象类,对C#的抽象类感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的抽象类
    2015-11-11
  • UnityShader3实现彩光效果

    UnityShader3实现彩光效果

    这篇文章主要为大家详细介绍了UnityShader3实现彩光效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • C#删除文件夹和文件到回收站示例

    C#删除文件夹和文件到回收站示例

    本文介绍了C#删除文件和文件夹到回收站的方法,平时都是使用File.Delete方法删除文件,这样删除之后就真没有了。下面的代码可以将文件删除放到回收站里
    2014-01-01

最新评论