索引器实现

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

索引器和数组比较:

(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     }

 

posted @ 2015-09-29 22:54  叫我霍啊啊啊  阅读(233)  评论(0编辑  收藏  举报