C# 虚方法的重载 new 与 virtual
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace OverrideTest { class A { private String username; public void method1() { Console.WriteLine("A.method1"); } //虚函数能够被重载,能够多态 public virtual void method2() { Console.WriteLine("A.method2"); } } class B : A { //调用这个函数名的时候,查看当前的编译类型是什么,根据这个编译类型调用编译类型的方法。 public new void method1() { Console.WriteLine("B.method1"); } //调用这个函数名的时候,查看当前的运行时类型是什么,根据这个对象的实际类型调用它的方法。 public override void method2() { Console.WriteLine("B.method2"); } } class Test { public static void Main() { B b = new B(); A a = b; a.method1(); a.method2(); b.method1(); b.method2(); Console.Read(); } } }
输出结果:
A.method1
B.method2
B.method1
B.method2
本文出自 无忧之路 - 博客园