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

在C# 12中是否应为主构造函数参数创建私有属性?

主构造函数两种实现的差异与实现2的优势

你给出的两种C# 12主构造函数实现,核心差异在于是否显式声明类的私有成员,实现2相比实现1有以下几个关键优势:

  • 明确的成员可控性
    实现1中,主构造函数的a、b参数会被编译器隐式转换为私有只读字段,但你无法直接控制这些字段的命名、访问修饰符或行为。而实现2显式声明了_a、_b私有init-only属性,你可以清晰定义成员的命名规则、访问权限,后续维护时能直观识别类的内部状态。

  • 支持扩展构造函数场景
    如果后续需要给Calculation类添加额外构造函数,实现1的主构造函数参数无法在其他构造函数的函数体中直接访问;而实现2的_a、_b是类的成员,可在构造阶段读取(或修改,若调整访问器)。例如:

    // 实现2可添加的扩展构造函数
    public Calculation(int singleValue) : this(singleValue, singleValue)
    {
        Console.WriteLine($"初始化值:{_a}"); // 可直接访问_a
    }
    

    这段代码在实现1中会编译报错,因为主构造函数参数的作用域不覆盖额外构造函数的函数体。

  • 更高的扩展性与灵活性
    若后续需要给这些成员添加逻辑(比如在属性getter中加入值验证、或者调整为可内部修改的访问器),实现2可以直接在显式声明的_a、_b上修改;而实现1的隐式字段由编译器生成,无法直接调整其行为,只能依赖主构造函数参数的使用方式,灵活性受限。

  • 更好的代码可读性与规范性
    在复杂类中,主构造函数参数可能和局部变量、方法参数同名,容易造成混淆。实现2使用_a、_b这种符合传统私有成员命名规范的写法,能明确区分类成员与局部变量,降低理解成本,也更贴合多数团队的编码习惯。

内容的提问来源于stack exchange,提问作者Prasanna Kumar J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:46:18