📅  最后修改于: 2023-12-03 14:39:44.494000             🧑  作者: Mango
在C#中,virtual关键字用于声明某个方法可以在派生类中被重写。当使用虚拟方法时,程序员可以在基类中提供一个默认实现,但允许在派生类中覆盖这个默认实现。
使用virtual关键字可以这样定义一个方法:
public class BaseClass
{
public virtual void MethodToOverride()
{
Console.WriteLine("I am the BaseClass.MethodToOverride");
}
}
public class DerivedClass : BaseClass
{
public override void MethodToOverride()
{
Console.WriteLine("I am the DerivedClass.MethodToOverride");
}
}
在上述代码中,BaseClass
定义了一个名为MethodToOverride
的虚方法,派生类DerivedClass
重写该方法,覆盖默认的实现。
在运行时,调用MethodToOverride
将调用派生类中的实现,而非基类中的默认实现。
BaseClass obj = new DerivedClass();
obj.MethodToOverride(); // 输出 "I am the DerivedClass.MethodToOverride"
使用virtual关键字时需要注意,仅当方法签名与基类中定义的方法签名完全相同时,才能使用override关键字重写基类中的虚方法。否则将会编译错误。
public class BaseClass
{
public virtual void MethodToOverride(int x)
{
Console.WriteLine("I am the BaseClass.MethodToOverride");
}
}
public class DerivedClass : BaseClass
{
public override void MethodToOverride()
{
Console.WriteLine("I am the DerivedClass.MethodToOverride");
}
}
在上述代码中,派生类中的MethodToOverride
没有参数,而基类中的虚方法有一个整型参数。因此,编译器会报错。
virtual
关键字用于声明基类中的方法可以在派生类中被重写。使用override
关键字在派生类中重写方法时,函数签名必须和基类中定义的方法签名完全相同。若基类中定义的方法没有使用virtual
关键字,则不能在派生类中重写。