所以我有以下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,因为这个属性有一个默认值?
答案 0 :(得分:0)
我设法回答了我的问题,问题是vector<T>
中的属性是BankAccount
,然后在virtual
中覆盖,因此当我调用LoanAccount
时,它正在使用覆盖派生类(CalculateInterest
)中的属性而不是虚拟属性(在LoanAccount
中),这使我认为我应该非常小心使用虚拟属性。