虚拟财产的默认值

时间:2016-06-27 13:38:43

标签: c#

所以我有以下absract类的抽象类:

public abstract class BankAccount
{
    public virtual double InterestRate { get; protected set; } = 2.35;

    public virtual double CalculateInterest(int months)
    {
        return months * this.InterestRate;
    }
}

然后我派出了一个类:

public class LoanAccount : BankAccount
{
    public override double CalculateInterest(int months)
    {
        if ((this.Customer is Individual && months <= 3) || (this.Customer is Company && months <= 2))
        {
            this.InterestRate = 1.00;
        }
        return base.CalculateInterest(months);
    }
}

这是调用:

static void Main(string[] args)
{
    List<BankAccount> bankAccounts = new List<BankAccount>(10)
    {
        new LoanAccount(new Individual(), 1000)
    };

    Console.WriteLine(bankAccounts[0].CalculateInterest(4));
}
  

当我进入时拨打loanAccount.CalculateInterest(4)   base.CalculateInterest给我的所有InterestRate方法都是   0。为什么?不是必须是2.35,因为这个属性有一个默认值?

1 个答案:

答案 0 :(得分:0)

我设法回答了我的问题,问题是vector<T>中的属性是BankAccount,然后在virtual中覆盖,因此当我调用LoanAccount时,它正在使用覆盖派生类(CalculateInterest)中的属性而不是虚拟属性(在LoanAccount中),这使我认为我应该非常小心使用虚拟属性。