C#三种属性定义方式的差异解析及相关疑问解答
三个C#属性定义示例的差异解析及问题解答
示例代码展示
示例A
public class Product { public string Name { get; set; } = "Limited Edition Item"; }
示例B
public class Product { public string Name { get; set; } => "Limited Edition Item"; }
示例C
public class Product { public string Name => "Limited Edition Item"; }
核心差异解析
- 示例A:带默认值的可读写自动属性。编译器会自动生成幕后存储字段,
= "Limited Edition Item"为该字段设置初始值。可以正常读取当前字段值,也能通过set修改字段内容,修改后读取会返回新值。 - 示例B:用表达式体实现
get访问器的属性,但冗余声明了set。get每次都返回固定字符串,set无实际逻辑——就算给Name赋值,也不会改变任何存储状态,下次读取依然返回固定值,这个set完全无效。 - 示例C:只读表达式体属性,等价于仅包含
get访问器的自动属性,没有set访问器。无法对Name进行赋值操作,每次读取都返回固定字符串。
问题解答
示例A是否为带有默认值的可读写属性?
是。{ get; set; }明确标记它是可读写属性,= "Limited Edition Item"为属性的幕后存储字段设置了初始默认值,后续可正常修改该属性的值。示例A与示例B之间存在差异吗?
有本质差异。示例A的属性有实际存储,赋值会修改存储内容,读取返回当前存储值;示例B的get始终返回固定值,set无实际作用,赋值操作不会改变读取结果。示例C支持设置操作还是仅为只读属性?
仅为只读属性。它通过表达式体语法定义,仅包含get访问器,没有set访问器,无法对其进行赋值操作。
内容的提问来源于stack exchange,提问作者d1du
相关产品推荐
相关产品推荐

