标签:
今天在一个类中定义了一个索引器,但是再定义一个叫Item的属性的时候发现编译器报错:
1 namespace Test 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Person p = new Person(); 8 p["name"] = "hello"; 9 Console.WriteLine(p[3]); 10 Console.WriteLine(p["name"]); 11 Console.ReadLine(); 12 13 } 14 } 15 16 public class Person 17 { 18 private string name; 19 private int age; 20 private char[] ch = {‘q‘,‘r‘,‘m‘,‘d‘}; 21 22 public char this[int index] 23 { 24 get { return ch[index]; } 25 set { ch[index] = value; } 26 } 27 public string Msg { get; set; } 28 29 public object this[string index] 30 { 31 get 32 { 33 switch (index) 34 { 35 case"age": 36 return age; 37 case "name": 38 return name; 39 default : 40 return null; 41 } 42 } 43 set 44 { 45 switch (index) 46 { 47 case "name": 48 name = value.ToString(); 49 break; 50 case "age": 51 age = (int) value; 52 break; 53 } 54 } 55 } 56 // public string Item { get; set; } 57 58 } 59 }
反编译下程序,去看看索引器的真面目:
我们发现,原来微软把我们定义的索引器搞成了一个叫item的属性,怪不得自己定义Item属性会编译不通过
我们还发现,这个索引器只是提供了两个方法,为了外面我们方便操作类成员罢了。
还有,这个自动属性Msg,微软也自动生成了一个字段。
标签:
原文地址:http://www.cnblogs.com/cnduan/p/4415693.html