码迷,mamicode.com
首页 > 其他好文 > 详细

索引器的真面目

时间:2015-04-10 22:05:53      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:

今天在一个类中定义了一个索引器,但是再定义一个叫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 }
View Code

 

反编译下程序,去看看索引器的真面目:

技术分享

 

我们发现,原来微软把我们定义的索引器搞成了一个叫item的属性,怪不得自己定义Item属性会编译不通过

我们还发现,这个索引器只是提供了两个方法,为了外面我们方便操作类成员罢了。

还有,这个自动属性Msg,微软也自动生成了一个字段。

 

索引器的真面目

标签:

原文地址:http://www.cnblogs.com/cnduan/p/4415693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!