using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace virtual_test { public class BClass //基类 { public virtual void DoWork() //虚函数 { Console.WriteLine("调用基类方法"); } public virtual int WorkProperty { get { return 0; } } public class DerivedClass : BClass //子类 { public override void DoWork() //重写基类方法, //等同于public new void DoWork(){},前提是基类中此方法的virtual去掉 { Console.WriteLine("调用的是新类的方法"); } public override int WorkProperty { get { return 0; } } static void Main() { DerivedClass B = new DerivedClass(); B.DoWork(); //调用新的方法 BClass A = (BClass)B; //派生类的实例强制转换为基类的实例 A.DoWork(); //调用老的方法 } } } } //为了使派生类的实例完全接替来自基类的类成员,基类必须将该成员声明为虚拟的。 //这是通过在该成员的返回类型之前添加virtual关键字来实现的。