使用基类方法返回值

本文关键字:返回值 类方法 基类 | 更新日期: 2023-09-27 18:11:37

我的基类中有一个方法返回一个bool,我希望该bool确定派生类中相同的重写方法会发生什么。

基础:

    public bool Debt(double bal)
    {
        double deb = 0;
        bool worked;
        if (deb > bal)
        {
            Console.WriteLine("Debit amount exceeds the account balance – withdraw cancelled");
            worked = false;
        }
        else
        bal = bal - deb;
        worked = true;
        return worked;
    }

衍生

public override void Debt(double bal)
    {
        // if worked is true do something
    }

注意,bal来自我之前制作的一个构造函数

使用基类方法返回值

您可以使用base关键字调用基类方法:

public override void Debt(double bal)
{
    if(base.Debt(bal))
        DoSomething();
}

如上面的注释所示,您需要确保基类中有一个具有相同签名(返回类型和参数(的虚拟方法,或者从派生类中删除override关键字。

if(base.Debt(bal)){
    // do A
}else{
    // do B
}

base是指基类。所以base.X是指基类中的X

调用base方法:

public override void Debt(double bal)
{
    var worked = base.Debt(bal);
    //Do your stuff
}

正如其他几个人所提到的,您可以使用base.Debt(bal)来调用基类方法。我还注意到您的基类方法没有声明为虚拟的。默认情况下,C#方法不是虚拟的,因此除非在基类中将其指定为虚拟的,否则不会在派生类中重写它。

//Base Class
class Foo
{
    public virtual bool DoSomething()
    {
        return true;
    }
}
// Derived Class
class Bar : Foo
{
    public override bool DoSomething()
    {
        if (base.DoSomething())
        {
           // base.DoSomething() returned true
        }
        else
        {
           // base.DoSomething() returned false
        }
    }
}

以下是msdn对虚拟方法

的看法