zoukankan      html  css  js  c++  java
  • C#索引器

    索引器(indexer)
    索引器允许类或结构的实例按照与数组相同的方式进行索引。
    索引器类似于属性,不同之处在于它们的访问器采用参数。

    一、索引器与数组类的区别:
    数组类声明了多个实例,其内容存储在托管堆中,每个实例声明的名称都指向所对应的托管堆。
    索引器只需要声明一个实例,其内容存储在索引器的一个数组中。索引器的索引不只是int型,还
    可以是其它类型。

    using System.Collections;
    internal class ArrClass//没有索引器的类
    {
     private readonly string name; 
     public ArrClass(string name)
     {
      this.name=name;
     }
     public string Name
     {
      get
      {
       return name;
      }
     }
      
    }
    internal class IndexClass//有索引器的类
    {
     private Hashtable age=new Hashtable();//①
     public int this[string index]
     {
      get
      {
       return System.Convert.ToInt32(age[index]);
      }
      set
      {
       age.Add(index,value);
      }
     }
     
    }
    internal class Test
    {
     static void Main()//主函数
     {
      //数组的访问
      ArrClass[] a=new ArrClass[10];
      a[0]=new ArrClass("tom");
      a[1]=new ArrClass("lilly");
      System.Console.WriteLine(a[0].Name+"  "+a[1].Name);
      //索引器的访问
      IndexClass b=new IndexClass();
      b["A0"]=12;
      b["A1"]=22;
      System.Console.WriteLine(b["A0"]+"  "+b["A1"]);
     }
    }
    

    注①:Hashtable的使用
    在.net Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似
    Key/value的键值对,其中Key通常用来快速查找,同时Key是区分大小写;value用于存储对应于key的值。
    Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的Key/value键值对。
    Hashtable中存放的类型是DictionaryEntry类型  

    索引器与数组的比较(概括性总结):
    ●索引器的索引值(Index)类型不受限为整数
     用来访问数组的索引值(Index),其类型一定为整数,然而索引器可以定义其他类型的索引值。


    ●索引器允许重载(Overloading)
     一个类并不限制只能够定义一个索引器,只要索引器的函数签名不同,一个类就可以拥有很多
    个索引器,你可以重载它的功能。

    ●索引器不是一个变量
     索引和数组不同的地方在于,索引器并没有直接对应应用数据存储的地方,而数组则有。
    索引器有get访问器与set访问器,用来指明要读取或写入索引器元素,时,需要执行的代码。

    索引器与属性的不同点(概括性总结):
    ●标识方式:属性以名称来标识;索引器则以函数签名来标识。

    ●索引器可以被重载:因为属性是以名称标识的,所以不能被重载;索引器是用函数签名标识的,因此
    可以重载。

    ●索引器不可以声明为static;属性可以为static,而索引器永远属于实例成员,不能为static。
    二、索引器可以有多个索引(index),并且索引类型可以不同
    例:

    public int this[string name,int couseID]
    {
     get;
     set;
    }
    

    三、数组及类在内存中的储存原理

    数组的存储原理:

    当声明一个数组(new int[3])时,会在托管堆中创建三个int型(4字节)的内存空间,并将此托管堆的地址赋值给a。在对数组进行操作时先从堆栈中取出a所指向的地址,再读取托管堆中对应的内容。

    类的存储原理:

    当声明一个类数组(new ArrClass[3])时,会在托管堆中创建三个ArrClass类的实例,并将此托管堆的地址赋值给a。在对类数组进行操作时先从堆栈中取出a所指向的地址,再通过此地址对实例进行操作。

  • 相关阅读:
    Mayan游戏 (codevs 1136)题解
    虫食算 (codevs 1064)题解
    靶形数独 (codevs 1174)题解
    黑白棋游戏 (codevs 2743)题解
    神经网络 (codevs 1088) 题解
    The Rotation Game (POJ 2286) 题解
    倒水问题 (codevs 1226) 题解
    银河英雄传说 (codevs 1540) 题解
    生日蛋糕 (codevs 1710) 题解
    第一章 1.11 高阶函数
  • 原文地址:https://www.cnblogs.com/lhard/p/2136621.html
Copyright © 2011-2022 走看看