深入理解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#在线程中访问ui元素的几种实现方法

    C#在线程中访问ui元素的几种实现方法

    在C#中,特别是在Windows窗体(WinForms)或WPF应用程序中,直接从非UI线程(如后台工作线程)访问UI元素通常是不被允许的,如果你需要在非UI线程中更新UI元素,本文给大家介绍了C#在线程中访问ui元素的几种实现方法,需要的朋友可以参考下
    2024-07-07
  • C#中ftp检测目录是否存在和创建文件夹的实现

    C#中ftp检测目录是否存在和创建文件夹的实现

    本文主要介绍了C#中ftp检测目录是否存在和创建文件夹的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • 使用C#快速搭建一个在windows运行的exe应用

    使用C#快速搭建一个在windows运行的exe应用

    这篇文章主要介绍了使用C#快速搭建一个在windows运行的exe应用,这是一个比较旧的内容,但是一直都没有空写,今天花点时间,把我掌握的C# 分享给初学的人或者感兴趣的人,希望能对你有一定帮助,感兴趣的小伙伴跟着小编一起来看看吧
    2024-07-07
  • C# 获取汉字的拼音首字母

    C# 获取汉字的拼音首字母

    一种是把所有中文字符集合起来组成一个对照表;另一种是依照汉字在Unicode编码表中的排序来确定拼音的首字母。碰到多音字时就以常用的为准(第一种方法中可以自行更改,方法为手动把该汉字移动到对应的拼音首字母队列,我们这里介绍第二种
    2015-06-06
  • 在C#中生成PDF的步骤详解

    在C#中生成PDF的步骤详解

    在 .NET 世界中,存在许多 PDF 库,但我们发现,使用集成浏览器生成 PDF 更为简单,由于 DotNetBrowser 可以在完全脱离屏幕的情况下工作,本文给大家介绍了如何在 C# 中生成 PDF,需要的朋友可以参考下
    2024-10-10
  • C#基础 延迟加载介绍与实例

    C#基础 延迟加载介绍与实例

    C#基础 延迟加载介绍与实例,有效使用它可以大大提高系统性能,需要的朋友可以参考一下
    2013-04-04
  • c#静态方法和非静态方法详细介绍

    c#静态方法和非静态方法详细介绍

    这篇文章主要介绍了c#静态方法和非静态方法,需要的朋友可以参考下
    2014-02-02
  • C#中图片.BYTE[]和base64string的转换方法

    C#中图片.BYTE[]和base64string的转换方法

    下面小编就为大家带来一篇C#中图片.BYTE[]和base64string的转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • C#中实现契约测试的方法

    C#中实现契约测试的方法

    这篇文章主要介绍了C#中实现契约测试,在本文中,我将揭开契约测试的神秘面纱,并向您展示如何在 C# 项目中实现它,需要的朋友可以参考下
    2023-09-09
  • 通过特性(attribute)为枚举添加更多信息示例

    通过特性(attribute)为枚举添加更多信息示例

    这篇文章主要介绍了通过特性(Attribute)为枚举添加更多的信息,大家参考使用吧
    2014-01-01

最新评论