银行层级应用问题:Savings.interest字段未使用及账户异常
问题排查与修复建议
1. 核心问题根源
- Savings.interest未使用警告:Savings类中定义了私有属性
interest但从未被引用,属于冗余代码。 - 错误输出"Balance cannot be negative":Account类的Balance属性setter逻辑完全颠倒,错误判断当前
_balance值而非传入的value值。 - 利息计算异常:Balance未被正确初始化/赋值,导致
CalculateInterest使用错误的余额数值;同时Savings类的Interest属性赋值逻辑存在歧义。
2. 分步修复
修复Account基类的Balance属性
原setter逻辑错误,应验证传入的value是否合法,而非当前_balance的数值:
public double Balance { get { return _balance; } set { if (value >= 0) // 验证传入的value是否非负,而非当前_balance { _balance = value; } else { Console.WriteLine("Balance cannot be negative"); } } }
修复后,初始化合法正数余额时不会误触发错误提示,余额赋值逻辑恢复正常。
修复Savings类的冗余字段与Interest属性
删除未使用的私有interest属性,调整Interest为只读自动属性(构造函数内可合法赋值):
class Savings : Account { public double Interest { get; } // 只读自动属性,构造函数内可赋值 public Savings(double balance, double i) : base(balance) { Interest = i; // 构造函数内正确初始化Interest } public double CalculateInterest() { return Balance * Interest / 100; } }
此修复消除了未使用字段的警告,同时保证Interest属性被正确赋值。
3. 修复后的完整代码
Account基类
using System; namespace accountApp { class Account { private double _balance; public Account(double b) { Balance = b; } public double Balance { get { return _balance; } set { if (value >= 0) { _balance = value; } else { Console.WriteLine("Balance cannot be negative"); } } } public void Credit(double credit) { if (credit > 0) { _balance += credit; } } public void Debit(double debitAmount) { if (_balance - debitAmount >= 0) { _balance -= debitAmount; } else { Console.WriteLine("Debit is too high"); } } } }
Savings派生类
using System; namespace accountApp { class Savings : Account { public double Interest { get; } public Savings(double balance, double i) : base(balance) { Interest = i; } public double CalculateInterest() { return Balance * Interest / 100; } } }
验证说明
- 初始化Savings账户时,传入正数余额不会再触发错误提示;
- 编译器未使用字段的警告消失;
- 调用
CalculateInterest()时,会基于正确的Balance和Interest值计算利息。
内容的提问来源于stack exchange,提问作者Bran
相关产品推荐
相关产品推荐

