使用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";:initsetter仅允许在对象构造阶段赋值,单独拆分写在构造完成后的赋值语句已经超出了init允许的生效范围,编译会直接报错。
补充说明
init setter的设计初衷就是配合对象初始化器使用,既可以保证属性仅在对象构造阶段可写、构造完成后变为只读不可修改,又不需要开发者定义大量重载的构造函数来满足不同的初始化需求,兼顾了类型的不可变性和初始化的灵活性。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

