在 C# 中,虚函数(Virtual Function) 是一种允许子类重写(Override)父类方法的机制。通过虚函数,可以实现 运行时多态(Runtime Polymorphism),即在程序运行时根据对象的实际类型调用相应的方法。
虚函数的定义
在 C# 中,使用 virtual 关键字将一个方法声明为虚函数。子类可以通过 override 关键字重写该方法。
语法
class BaseClass
{
public virtual void MyMethod()
{
Console.WriteLine("BaseClass.MyMethod");
}
}
class DerivedClass : BaseClass
{
public override void MyMethod()
{
Console.WriteLine("DerivedClass.MyMethod");
}
}
virtual:在基类中声明一个方法为虚函数,表示该方法可以被子类重写。
override:在子类中重写基类的虚函数。
虚函数的原理
方法表(VTable)
在 C# 中,虚函数的实现依赖于 方法表(Virtual Method Table, VTable)。每个类都有一个方法表,其中存储了虚函数的地址。
基类的虚函数在方法表中有自己的地址。
如果子类重写了虚函数,方法表中的地址会被替换为子类方法的地址。
运行时多态
当通过基类引用调用虚函数时,运行时会根据对象的实际类型查找方法表,并调用正确的方法