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

使用init语法的C#类如何正确进行对象构造?

结论

你给出的三种写法均不正确,触发init setter的正确写法是使用C#对象初始化器语法:

var obj = new Person { Name = "Tim" };

三种错误写法的原因说明

  • 第一种var obj = new Person("Tim");:
    你贴出的使用init的Person类没有定义接收string类型参数的构造函数,运行该代码会直接触发编译错误,提示找不到匹配的构造函数。
  • 第二种var obj = new Person().Name("Tim");:
    Name是属性不是方法,不能使用括号传递参数调用,同样会触发编译错误。
  • 第三种var obj = new Person(); obj.Name="Tim";:
    init setter仅允许在对象构造阶段赋值,单独拆分写在构造完成后的赋值语句已经超出了init允许的生效范围,编译会直接报错。

补充说明

init setter的设计初衷就是配合对象初始化器使用,既可以保证属性仅在对象构造阶段可写、构造完成后变为只读不可修改,又不需要开发者定义大量重载的构造函数来满足不同的初始化需求,兼顾了类型的不可变性和初始化的灵活性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:36:10