19 {
20 }
21
22 };
23
24
25 //Person类实现了接口IEnumerable,使得类中定义的Array数组能够使用foreach枚举
26 public class Person :BasePerson, IEnumerable
27 {
28 private string name = "林田惠"; //---姓名
29 public int age=20; //---年龄
30
31 Array children=null;//---子女数组
32
33 Person()
34 {
35 }
36
37 Person(string a,int b)
38 {
39 Name = a;
40 Age = b;
41 }
42
43
44 public string Name
45 {
46 get { return name; }
47 set { }
48 }
49
50 public int Age
51 {
52 get { return age; }
53 set { }
54 }
55
56 public void AddAge()//---自增一岁的方法
57 {
58 Age+=1;
59 }
60
61
62 public delegate void PersonNameHandler(string x);
63 public event PersonNameHandler OnChangeName; //------定义了一个改变姓名的事件
64
65 public void ChangeName(string nam)//---改名的方法
66 {
67 Name = nam;
68 }
69
70 public void ChangeNameAndAddAge(string name,int age)//------具有两个参数的方法,用来演示反射具体方法的详细情况
71 {
72 this.Name = name;
73 this.Age += age;
74 }
75
76 public IEnumerator GetEnumerator()//---实现接口
77 {
78 return children.GetEnumerator();
79 }
80
81 }
82
83
84
85 public class Program
86 {
87
88
89 构建自定义元数据查看器#region 构建自定义元数据查看器
90
91 //-------------显示传入类型拥有的方法名称
92 public static void ListMethods(Type t)
93 {
94 Console.WriteLine("\n该类型的所有方法:");
95 MethodInfo mi = t.GetMethods();
96 foreach (MethodInfo m in mi)
97 {
98 Console.WriteLine("\t方法名:{0}",m.Name);
99 }
100 }
101
102
103 //-------------显示一个方法的所有参数信息
104 public static void ListParameters(MethodInfo m)
105 {
106 ParameterInfo pi = m.GetParameters();
107 foreach (ParameterInfo p in pi)
108 {
109 Console.WriteLine("参数名:{0}\t参数类型:{1}",p.Name,p.ParameterType);
110 }
111 }
112
113
114 //-------------显示一个特定方法的详细情况
115 public static void ListMethodDetail(Type t, string MethodName)
116 {
117 MethodInfo m = t.GetMethod(MethodName);
118 Console.WriteLine("\n显示方法详情\n方法名称:{0}", MethodName);
119 Console.WriteLine("方法返回值类型:{0}", m.ReturnType.FullName);
120 ListParameters(m);
121
122 }
123
124 //------------显示传入类型拥有的字段名称
125 public static void ListFields(Type t)
126 {
127 Console.WriteLine("\n该类型的所有字段:");
128 FieldInfo fi = t.GetFields();
129 foreach (FieldInfo f in fi )
130 {
131 Console.WriteLine("\t字段名:{0}", f.Name);
132 }
133 }
134
135 //------------显示传入类型拥有的属性名称
136 public static void ListProperties(Type t)
137 {
138 Console.WriteLine("\n该类型的所有属性:");
139 PropertyInfo pi = t.GetProperties();
140 foreach (PropertyInfo p in pi)
141 {
142 Console.WriteLine("\t属性名:{0}", p.Name);
143 }
144 }
145
146
147 //------------显示传入类型拥有的基类名称
148 public static void ListInterFaces(Type t)
149 {
150 Console.WriteLine("\n该类型的所实现的接口:");
151 Type ii = t.GetInterfaces(); //-----------对GetInterfaces()的调用返回一个 Type类型 的数组(说明其实接口也是一种类型)
152 foreach (Type p in ii)
153 {
154 Console.WriteLine("\t接口名:{0}", p.Name);
155 }
156 }
157
1