A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨恩锋 黑马帝   /  2011-10-26 10:50  /  2004 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家来谈谈索引器的具体用法,现实开发当中什么时候该用索引器,有人说数据量大的时候就用,自我感觉好像索引器用的不多。最好能附上代码进行说明。

4 个回复

倒序浏览
我自己在开发中几乎用不到。。。。。 可能在学数据结构的时候 有用到
回复 使用道具 举报
索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类、结构或接口。索引器经常是在主要用于封装内部集合或数组的类型中实现的。例如,假定具有一个名为 TempRecord 的类,此类表示在 24 小时内的 10 个不同时间记录的华氏度。此类包含一个表示温度的 float 类型的名为“temps”的数组和表示记录温度的日期的 DateTime。通过在此类中实现一个索引器,客户端可以通过 float temp = tr[4] 而不是 float temp = tr.temps[4] 语法访问 TempRecord 实例中的温度。索引器表示法不仅简化了客户端应用程序的语法,还使其他开发人员能够更加直观地理解类及其用途。
代码是关键:
public int this[int index]    // Indexer declaration
{
    // get and set accessors
}
回复 使用道具 举报
以前我们写程序时,总会用到数组,当我们要操作数组中的某一个元素时,我们就会使用下标运算符来取到数组中的某一个元素。为什么可以用下标运算符就可以取到元素呢,是什么原理呢?我们知道C++中也有下标运算符,在C++中下标运算其实就是程序的一个函数,这个函数样子是:operator[]() ,最简单的加法+运算其实也是调用的函数operator+()。

所以了解了这个运算符的含义对我们理解C#中的索引器很有帮助,而C#中的索引器我们可以看成调用的也是一个函数。这个函数名字是this,当然它可以重载,可以有不同个参数。索引器呢当然也可以赋值
当然索引器也可以是只读的,就是只有get,而没有set

C#中的索引器用到的地方挺多的,比如web开发里面的Session,往Session里存值和从Session里取值都是用的索引器。


回复 使用道具 举报
  1. using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Person p = new Person();            //输出p的姓名            Console.WriteLine(p[1]);            Console.WriteLine(p[2]);            Console.ReadKey();        }    }    class Person    {        private string firstName = "jim";        private string familyName = "white";        //下面定义索引器        public string this[int index]        {            set            {                if (index == 1)                {                    firstName = value;                }                else if (index == 2)                {                    familyName = value;                }                else                {                    throw new Exception("错误的序号");                }            }            get             {                if (index == 1)                {                    return firstName;                }                else if (index == 2)                {                    return familyName;                }                else                {                    throw new Exception("错误的序号");                }            }        }    }}
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马