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
相关产品推荐
相关产品推荐

