使用virtual 修饰符后,不允许再有static, abstract, 或override 修饰符;该修饰符表明:该基类的派生类可以重载该方法。
虚拟方法和非虚拟方法之间的区别:
class BaseA
{
public void Func() { cout<<"BaseA.Func"; }
public virtual void Gfun() { cout<<"BaseA.Gfun"; }
}
class ChildB: BaseA
{
new public void Func() { cout<<"ChildB.Func"; }
public override void Gfun() { cout<<"ChildB.Gfun"; }
}
void Main() {
ChildB b = new ChildB();
BaseA a = b;
a.Func();
b.Func();
a.Gfun();
b.Gfun();
}
结果:
BaseA.Func
ChildB.Func
ChildB.Gfun
ChildB.Gfun
abstract 修饰的抽象类:
抽象类是特殊的类,只是不能被实例化(通过 new()来创建对象);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。