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关键字来实现的。
C#之virtual学习案例
本文转载:CSDN博客