You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

银行层级应用问题: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:25:18