索引

 新葡亰计算机网络     |      2020-03-29

using System;
using System.Windows.Forms;
class indexClass
{
 string[] name=new string[10];//name数组长度为10。
 public string this[int index] //返回string类型 index为整型索引项
 {
  get
  {
   return name[index];
  }
  set
  {
   if(index>9||index<0) //判定下标是否在0-9之间
    MessageBox.Show("输入数组下标有误");
   else
    name[index]=value; 
  }
 }
}
class test
{
 static void Main()
 {
  indexClass a=new indexClass();
  a[0]="张三";
  a[1]="李四";
  a[2]="王五";
  Console.WriteLine("a[0]编号的名字为 "+a[0]);
  Console.WriteLine("a[1]编号的名字为 "+a[1]);
  Console.WriteLine("a[2]编号的名字为 "+a[2]);
 }
}
输出:

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

a[0]编号的名字为 张三

索引器和数组比较:

a[1]编号的名字为 李四

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

a[2]编号的名字为 王五

(2)索引器允许重载

 

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

索引器和属性的不同点

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

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

(3)索引器不能声明为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 Indexer = new IndexerClass();
        //“=”号右边对索引器赋值,其实就是调用其set方法
        Indexer[0] = "张三";
       Indexer[1] = "李四";
        //输出索引器的值,其实就是调用其get方法
        Console.WriteLine(Indexer[0]);
       Console.WriteLine(Indexer[1]);
    }
}

 

 

以字符串作为下标,对索引器进行存取

public class IndexerClass
{
    //用string作为索引器下标的时候,要用Hashtable
    private Hashtable name = new Hashtable();

    //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象
    public string this[string index]
    {
        get { return name[index].ToString();
        set { name.Add(index, value); }
    }
}
public class Test
{
    static void Main()
    {
        IndexerClass Indexer = new IndexerClass();
        Indexer["A0001"] = "张三";
        Indexer["A0002"] = "李四";
        Console.WriteLine(Indexer["A0001"]);
        Console.WriteLine(Indexer["A0002"]);
    }
}

 

 索引器的重载

public class IndexerClass
{
    private Hashtable name = new Hashtable();

    //1:通过key存取Values
    public string this[int index]
    {
        get { return name[index].ToString(); }
        set { name.Add(index, value); }
    }