最近在教学生时,学员老理解不清方法的隐藏和重写,后来想了想,终于能用反射能让学生明白这两者的区别!
看一下例子:
隐藏:
看一下例子:
隐藏:
1 class Class1
2 {
3 public void Method()
4 {
5
6 }
7 }
8 class Class2 : Class1
9 {
10 public new void Method()
11 {
12
13 }
14 }
15
2 {
3 public void Method()
4 {
5
6 }
7 }
8 class Class2 : Class1
9 {
10 public new void Method()
11 {
12
13 }
14 }
15
类Class2中的Method()方法会隐藏掉Class1的Method()。
重写:
重写:
方法的重写
类Class2中的Method()方法会隐藏掉Class1的Method()。
重写:
方法的重写
1 class Class1
2 {
3 public virtual void Method()
4 {
5
6 }
7 }
8 class Class2 : Class1
9 {
10 public override void Method()
11 {
12
13 }
14 }
15
1 class Class1
2 {
3 public virtual void Method()
4 {
5
6 }
7 }
8 class Class2 : Class1
9 {
10 public override void Method()
11 {
12
13 }
14 }
15
在上面的代码中,对于初学者可能理解不了什么是隐藏,什么是重写,因为在实例化这两个类后,调用它们的方法时,都只是Class2中Method()的方法在执行,怎么能看出来呢?
其实引用下面代码即反射就能来看出方法的隐藏还是重写:
其实引用下面代码即反射就能来看出方法的隐藏还是重写:
1 MemberInfo[] MI=typeof(Class2).GetMethods ();
2 foreach (MemberInfo mi in MI)
3 {
4 Console .WriteLine (mi. Name);
5 }
2 foreach (MemberInfo mi in MI)
3 {
4 Console .WriteLine (mi. Name);
5 }
我们可以在上面的两种状态下来看一下结果,如下
隐藏方法如下图:
重写的方法如下图:
可见隐藏后是两个Method方法,重写后是一个Method方法。
隐藏方法如下图:
重写的方法如下图:
可见隐藏后是两个Method方法,重写后是一个Method方法。
本文转自桂素伟51CTO博客,原文链接:http://blog.51cto.com/axzxs/149995
,如需转载请自行联系原作者