C# 使用基类方法返回值?

C# 使用基类方法返回值?,c#,inheritance,methods,C#,Inheritance,Methods,我的基类中有一个返回bool的方法,我希望该bool确定在我的派生类中相同的重写方法会发生什么 基数: 衍生 public override void Debt(double bal) { // if worked is true do something } 请注意,bal来自我前面创建的构造函数您可以使用base关键字调用基类方法: public override void Debt(double bal) { if(base.Debt(bal))

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

基数:

衍生

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)
调用基类方法。我还注意到您的基类方法没有声明为virtual。默认情况下,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对虚拟方法的说明

确保您的基类方法是虚拟的:
公共虚拟bool Deb(双bal)
,否则您的派生类会将其隐藏。只是一个旁注。返回值类型也必须匹配,否则会出现编译器错误,
。最好将
if
后的区域括起来,然后在那里执行操作,而不是调用其他方法。为什么要让调用堆栈比必须的更深?@Jeff-我把方法调用放在那里纯粹是为了表明应该在那里发生一些事情。它也可能是内联语句。我明白你的意思,只是无法判断结果是真是假false@TheAce:它位于
if
语句中。
if
计算基类方法的返回值。如果你陷入了“如果”的检查,那是真的。否则,这是错误的。
//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
        }
    }
}