咨询private int var {get; set;}与public int var {get; private set;}的差异及报错原因
C#两种属性定义的功能区别及报错原因
功能层面的区别
两段代码都是C#的自动属性定义,但访问权限控制完全不同:
- 第一段代码:
整个属性的访问级别是private int var {get; set;}private,只有当前类的内部代码能读取或修改var的值,外部类完全无法访问这个属性。 - 第二段代码:
属性的public int var {get; private set;}get访问器是public,外部类可以自由读取var的值;但set访问器是private,只有当前类内部能修改它的值。这种写法常用于对外暴露只读数据,但内部可以更新的场景。
第一段代码的报错原因
这段代码报错主要源于两点:
- 语法规范冗余:C#中自动属性的设计初衷是简化公共/受保护属性的定义,当整个属性标记为
private时,直接定义私有字段private int var;更符合语法设计逻辑,部分编译器或IDE会判定这种自动属性写法不符合规范,触发错误。 - 未使用的私有成员:如果这个私有属性在类内部没有被任何代码读取或修改,IDE(比如Visual Studio)会触发“未使用的私有成员”编译警告,若开启了“将警告视为错误”的编译选项,就会直接报错。
内容的提问来源于stack exchange,提问作者Amama
相关产品推荐
相关产品推荐

