索引器实验

来源:互联网 发布:淘宝介入售后 退货拒收 编辑:程序博客网 时间:2024/06/06 14:21

索引器的定义

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

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

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

{

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

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

}

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

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

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

class Z

        private long[] arr = new long[100];       //可容纳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,再通过索引来引用该对象中的数组元素。


定义索引器应注意以下内容:

1、所有索引器都使用this关键词来取代方法名。Class或Struct只允许定义一个索引器,而且总是命名为this。 
2、索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。 
3、get 访问器返回值。set 访问器分配值。  
4、this 关键字用于定义索引。  
5、value 关键字用于定义由 set 索引器分配的值。  
6、索引器不一定根据整数值进行索引,您可以根据编程要求指定参数类型。  
7、索引器可被重载。  
8、索引器可以有多个形参,例如当访问二维数组时。  
9、索引器的方括号中可以是任意参数列表。

==========================  实验部分

类的每一个属性都必须拥有一个唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名

或者参数列表,这样就可以实现索引器重载。属性可以是static,而索引器必须是实例成员。为索

引器定义的访问函数可以访问传递给索引器的参数,而属性访问函数则没有参数我们也可以为接

口定义索引器,在为接口声明索引器的时候,记住声明只是表示索引器的存在,你只需要提供恰

当的访问函数即可不必包括修饰符。

using System;using System.Collections;
public
class IndexerClass{ private string[] name = new string[2]; //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象 public string this[int index] { //实现索引器的get方法 get { if (index < 2) { return name[index]; } return null; } //实现索引器的set方法 set { if (index < 2) { name[index] = value; } } }}public class Test{ static void Main() { IndexerClass myindex = new IndexerClass(); //索引器的使用
                                                               //“=”号右边对索引器赋值,其实就是调用其set方法      
        myindex[0] = "张三";        
        myindex[1] = "李四";                        //输出索引器的值,其实就是调用其get方法       
      Console.WriteLine(myindex[0]);       
      Console.WriteLine(myindex[1]);   
    }
}


属性和索引器之间的区别

Property

索引器

允许像调用公共数据成员一样调用方法。

允许对一个对象本身使用数组表示法来访问该对象内部集合中的元素。

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

可通过索引器进行访问。

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

必须为实例成员。

属性的 get 访问器没有参数。

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

属性的 set 访问器包含隐式 value 参数。

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

支持对自动实现的属性(C# 编程指南)使用短语法。

不支持短语法。


数组和索引器之间的区别

索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。

索引器和数组比较:

(1)索引器的索引值(Index)类型不受限制

(2)索引器允许重载

(3)索引器不是一个变量

索引器和属性的不同点

(1)属性以名称来标识,索引器以函数形式标识

(2)索引器可以被重载,属性不可以

(3)索引器不能声明为static,属性可以



另附博客:http://www.cnblogs.com/ArmyShen/archive/2012/08/27/2659405.html


0 0
原创粉丝点击