【发布时间】:2011-03-19 14:52:36
【问题描述】:
我刚刚意识到 C# 属性构造也可以与 private 访问修饰符一起使用:
private string Password { get; set; }
虽然这在技术上很有趣,但我无法想象我什么时候会使用它,因为私人领域甚至涉及更少的仪式:
private string _password;
我无法想象我什么时候需要能够在内部 get 而不是 set 或 设置但不获取私有字段:
private string Password { get; }
或
private string Password { set; }
但也许有一个使用嵌套/继承类的用例,或者get/set可能包含逻辑而不是仅仅返回属性的值,尽管我倾向于保持属性严格简单并让显式方法执行任何逻辑,例如GetEncodedPassword().
是否有人出于任何原因在 C# 中使用私有属性,或者它只是技术上可能但很少在实际代码中使用的结构之一?
附录
很好的答案,通读它们我挑选出私有财产的这些用途:
- 私有字段需要延迟加载时
- 当私有字段需要额外的逻辑或者是计算值时
- 因为私有字段可能难以调试
- 为了“向自己出示合同”
- 作为序列化的一部分在内部转换/简化公开的属性
- 包装要在类中使用的全局变量
【问题讨论】:
-
私有属性鼓励的技术是self encapsulation - 见:sourcemaking.com/refactoring/self-encapsulate-field
-
@LBushkin 自我封装似乎是关于受保护(或公共)属性而不是私有属性。
标签: c# properties access-modifiers