• 索引器实现


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

    索引器和数组比较:

    (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     }
  • 相关阅读:
    彻底清除Linux centos minerd木马 实战  跟redis的设置有关
    linux 弹出光驱失败
    teamviewer "TeamViewer Daemon is not running
    linux 如何查找io的进程
    网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?
    查看openssl的版本
    https单向认证和双向认证
    pem转换成der
    locate: can not open `/var/lib/mlocate/mlocate.db': No such file or directory
    mysql 有报错  ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
  • 原文地址:https://www.cnblogs.com/HuoAA/p/4847514.html
Copyright © 2020-2023  润新知