隐藏父类方法的new和重写父类虚方法virtual的区别
一、代码
1 public class Parent
2 {
3 public void Method_A()
4 {
5 Console.WriteLine("Parent Method_A");
6 }
7 public virtual void Method_B()
8 {
9 Console.WriteLine("Parent Method_B");
10 }
11 }
12 public class Child : Parent
13 {
14 public new void Method_A()
15 {
16 Console.WriteLine("Child Method_A");
17 }
18 public override void Method_B()
19 {
20 Console.WriteLine("Child Method_B");
21 }
22 }
23 class Program
24 {
25 static void Main(string[] args)
26 {
27 Child child = new Child();
28 child.Method_A();
29 child.Method_B();
30
31 Parent p = child as Parent;
32 p.Method_A();
33 p.Method_B();
34
35 Console.Read();
36 }
37 }
显示结果:
二、总结
1、子类使用new隐藏父类方法后,是独立于父类的方法。
2、子类使用override重写父类的方法后,只是在调用时不再调用父类方法而调用子类方法。
3、子类也可以使用new隐藏父类的虚方法。
3、创建的Child实例,在执行Method_A和Method_B方法时,都执行的是Child中的方法。
但是将该实例转换成父类时,Method_A执行的是Parent的Method_A方法,而Method_B执行的依旧是Child中的Method_B方法。