📜  c# virtual 关键字 - C# (1)

📅  最后修改于: 2023-12-03 14:39:44.494000             🧑  作者: Mango

C# Virtual 关键字

在C#中,virtual关键字用于声明某个方法可以在派生类中被重写。当使用虚拟方法时,程序员可以在基类中提供一个默认实现,但允许在派生类中覆盖这个默认实现。

使用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关键字,则不能在派生类中重写。