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

C#子类构造函数根据自身参数调整父类属性赋值的优化咨询

优化实现方案

针对你提出的父类参数依赖子类特定参数的场景,这里提供几种更整洁的实现方式:

方案1:提前计算参数调用父类构造

直接在调用父类构造时,根据子类参数c计算出最终要传入的ParamA值,既符合构造初始化语义,又简化代码:

public class B : A
{
    public B(int c, int d, int paramA, int paramB) 
        : base(c == 0 ? paramA - d : paramA, paramB)
    {
        C = c;
        D = d;
    }

    public int C { get; set; }
    public int D { get; set; }
}

方案2:提取计算逻辑为私有方法

如果后续判断逻辑变得复杂,将参数计算逻辑封装为私有静态方法,让构造函数职责更单一,可读性更强:

public class B : A
{
    public B(int c, int d, int paramA, int paramB) 
        : base(CalculateAdjustedParamA(c, d, paramA), paramB)
    {
        C = c;
        D = d;
    }

    private static int CalculateAdjustedParamA(int c, int d, int paramA)
    {
        return c == 0 ? paramA - d : paramA;
    }

    public int C { get; set; }
    public int D { get; set; }
}

方案3:简化现有赋值逻辑

若因特殊需求必须先初始化子类属性再处理父类属性,可去掉冗余分支,用三元表达式简化赋值:

public class B : A
{
    public B(int c, int d, int paramA, int paramB)
    {
        C = c;
        D = d;
        ParamA = c == 0 ? paramA - D : paramA;
        ParamB = paramB;
    }

    public int C { get; set; }
    public int D { get; set; }
}

优先推荐方案1或2,它们能在构造阶段完成父类属性的正确初始化,避免父类属性处于未初始化的中间状态,更符合面向对象设计原则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:15:22