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

  • 相关阅读:
    JVM调优2
    CAP理论/AP架构/CP架构
    JDK8 JVM性能优化-1
    string+和stringbuffer的速度比较
    @SpringBootApplication注解分析
    Spring Cloud底层原理
    Window 下安装 redis
    Spring的任务调度@Scheduled注解——task:scheduler和task:executor的解析
    多线程捕获线程中的异常
    将 HTML 页面内容转换为图片或PDF文件
  • 原文地址:https://www.cnblogs.com/lhard/p/2136621.html
Copyright © 2011-2022 走看看