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关键字来实现的。


本文转载:CSDN博客