使用基类方法返回值?

时间:2013-04-30 16:53:32

标签: c# inheritance methods

我的基类中有一个返回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来自我之前制作的构造函数

4 个答案:

答案 0 :(得分:10)

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

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

}

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

答案 1 :(得分:2)

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

base指基类。因此base.X引用基类中的X

答案 2 :(得分:2)

调用base方法:

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

答案 3 :(得分:1)

正如其他几位提到的那样,您可以使用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
        }
    }
}

Here's msdn对虚拟方法的评价