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

子类重赋值父类字段的简洁代码设计咨询:以银行账户类为例

解决方案

你要的「不可变+子类可自定义值+更简洁的继承逻辑」可以通过抽象只读属性实现。const属于编译期常量,是隐式静态的类级别成员,本身就不支持继承重写,并不适配这个场景。

优化后的代码如下:

public abstract class Account
{
    // 定义抽象只读属性,强制所有子类必须实现
    protected abstract string FriendlyName { get; }
    
    public string ShowBalance()
    {
        var message = new StringBuilder();
        message.Append($"Your {FriendlyName} balance is {Balance}")
               .Append("See you soon!");
        return message.ToString();
    }

    // 此处保留你原有代码中已实现的Balance属性
    protected decimal Balance { get; set; }
}

public class SavingsAccount : Account
{
    // 子类仅需重写属性即可,无需额外编写构造函数赋值
    protected override string FriendlyName => "savings account";
}

public class CurrentAccount : Account
{
    protected override string FriendlyName => "current account";
}

方案优势

  • 代码更精简,省去了子类构造函数的字段赋值逻辑
  • 天然不可变:属性仅开放get访问器,基类和子类都无法在运行时修改值,完全符合你想要的类const效果
  • 安全性更高:抽象属性强制所有非抽象子类必须实现FriendlyName,不会出现漏赋值导致字段为空的问题
  • 扩展性好:如果后续需要给FriendlyName增加逻辑(比如多语言翻译),仅需要修改对应子类的属性实现即可,不需要改动基类逻辑

内容的提问来源于stack exchange,提问作者Larry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:18:03