当前位置:  编程技术>.net/c#/asp.net

c#索引器详解示例

    来源: 互联网  发布时间:2014-10-29

    本文导语:  1、索引器的定义 C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。 定义索引器的方式与定义属性有些类似,其一般形式如下: [修饰符] 数...

1、索引器的定义

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

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

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

代码如下:

{
    get{//获得属性的代码}                                                
    set{ //设置属性的代码}
}

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

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

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

代码如下:

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 >= 100))
                {
                    arr[index] = value;
                }
            }
   }

2、索引器的使用

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

对象名[索引]

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

代码如下:

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、索引器与属性的比较

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

示例

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace suoyin
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] values = { 3,5,7,9};
            int i = values[1];

            Person p1 = new Person();
            p1[1] = "小明";
            Console.WriteLine(p1[1]+p1[2]);

            Console.WriteLine(p1["tom",3,9]);//索引也可以重载。
            Console.ReadKey();
        }
    }

    class Person
    {
        private string FirstName="大毛";
        private string SecondName="二毛";

        public string this[string name, int x, int y]
        {
            get
            {
                return name + x + y;
            }
        }
        public string this[int index]//中括号里的就是索引。
        {
            get
            {
                if (index == 1)
                {
                    return FirstName;
                }
                else if (index == 2)
                {
                    return SecondName;
                }
                else
                {
                    throw new Exception("这是个错误的序号啊亲!");
                }
            }
            set
            {
                if (index == 1)
                {
                    FirstName = value;
                }
                else if (index == 2)
                {
                    SecondName = value;
                }
                else
                {
                    throw new Exception("这是个错误的序号啊亲!");
                }
            }
        }
    }
}

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • MySQL查询优化之索引的应用详解
  • MySQ索引操作命令总结(创建、重建、查询和删除索引命令详解)
  • SQL Server 创建索引详解
  • 深入oracle分区索引的详解
  • oracle 索引组织表的深入详解
  • Mysql建表与索引使用规范详解
  • oracle索引介绍(图文详解)
  • C++ Strings(字符串) 成员 at():按给定索引值返回字符
  • mysql 添加索引 mysql 如何创建索引
  • Mysql索引类型:B-Tree索引介绍
  • MYSQL索引无效和索引有效的详细介绍
  • Mysql索引类型:Hash索引介绍及举例说明
  • mysql下普通索引和唯一索引的效率对比
  • MySQL索引基本知识
  • 在线等待:如何把vector清空,再用该清空vector是,索引是从0开始,而不是紧接着上次清空是的索引?
  • MySQL Hash索引和B-Tree索引的区别
  • sqlserver 聚集索引和非聚集索引实例
  • SQL Server 索引结构及其使用(一)--深入浅出理解索引结构第1/4页
  • MYSQL索引建立需要注意以下几点细节
  • bitmap 索引和 B-tree 索引在使用中如何选择
  • Mysql索引会失效的几种情况分析
  • 数据收集和索引系统 Moloch
  • 文件索引
  • mysql 表索引的一些要点
  • bitmap索引压缩处理 FastBit
  • 从Oracle的约束到索引
  • sql server对索引的使用
  • 索引的原理及索引建立的注意事项


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3