• 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所指向的地址,再通过此地址对实例进行操作。

  • 相关阅读:
    postman设置页面详解
    postman安装使用
    测试入门1:黑盒测试用例设计方法
    oo第十六次作业
    oo第三单元总结
    OO第二单元总结
    select语句
    MySQL数据库基础操作
    创建和查看数据库
    认识MySQL数据库
  • 原文地址:https://www.cnblogs.com/lhard/p/2136621.html
Copyright © 2020-2023  润新知