• 索引器实现


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

    索引器和数组比较:

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

    (2)索引器允许重载

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

    索引器和属性的不同点

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

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

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

    代码实现:

      1     //普通索引器
      2     public class SimpleClass
      3     {
      4         string[] arr = new string[2];
      5 
      6         public string this[int index]
      7         {
      8             get
      9             {
     10                 if (index < 2)
     11                     return arr[index];
     12                 else
     13                     return null;
     14             }
     15 
     16             set
     17             {
     18                 if (index < 2)
     19                     arr[index] = value;
     20             }
     21         }
     22     }
     23 
     24     //字符串下标索引器
     25     public class StrIndex
     26     {
     27         Hashtable ht = new Hashtable();
     28 
     29         public string this[string index]
     30         {
     31             get { return ht[index].ToString(); }
     32             set { ht.Add(index, value) }
     33         }
     34     }
     35 
     36     //索引器重载
     37     public class OverrideIndex
     38     {
     39         Hashtable ht = new Hashtable();
     40 
     41         public string this[int key]
     42         {
     43             get { return ht[key].ToString(); }
     44             set { ht.Add(key, value); }
     45         }
     46 
     47         public int this[string val]
     48         {
     49             get
     50             {
     51                 foreach (DictionaryEntry entry in ht)
     52                 {
     53                     if (entry.Value == val)
     54                         return Convert.ToInt32(entry.Key);
     55                 }
     56 
     57                 return -1;
     58             }
     59 
     60             set
     61             {
     62                 ht.Add(value, val);
     63             }
     64         }
     65     }
     66 
     67     //多参索引器
     68     public class MultiParamIndex
     69     {
     70         ArrayList list;
     71         public MultiParamIndex()
     72         {
     73             list = new ArrayList();
     74         }
     75 
     76         //根据Id和Name来获取Department
     77         public string this[int id, string name]
     78         {
     79             get
     80             {
     81                 foreach (Employee em in list)
     82                 {
     83                     if (em.Id == id && em.Name == name)
     84                         return em.Department;
     85                 }
     86                 return null;
     87             }
     88 
     89             set
     90             {
     91                 list.Add(new Employee(name,id,value));
     92             }
     93         }
     94 
     95         //根据Id查找员工实体
     96         public Employee this[int id]
     97         {
     98             get
     99             {
    100                 foreach (Employee em in list)
    101                 {
    102                     if (em.Id == id)
    103                         return em;
    104                 }
    105                 return null;
    106             }
    107         }
    108 
    109         //...
    110     }
    111 
    112     //员工信息实体
    113     public class Employee
    114     {
    115         public string Name { get; set; }
    116         public int Id { get; set; }
    117         public string Department { get; set; }
    118 
    119         public Employee(string name, int id, string department)
    120         {
    121             Name = name;
    122             Id = id;
    123             Department = department;
    124         }
    125     }
  • 相关阅读:
    vue过滤器filters
    vue指令
    java命令
    mysql的information_schema表
    es6 Object的keys values entries方法
    mysql information_schema.INNODB_TRX
    流动相似性例子
    【转】time 模块详解(时间获取和转换)
    查找——平衡二叉树的实现(代码超详细注释)
    py中变量名的“秘密”
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4847514.html
Copyright © 2020-2023  润新知