一尘不染

有什么理由在C#中使用私有属性吗?

c#

我刚刚意识到C# 属性构造 也可以与 私有 访问修饰符一起使用:

private string Password { get; set; }

尽管从技术上讲这很有趣,但是我无法想象何时使用它,因为 私有领域所 涉及的 仪式 甚至 更少

private string _password;

而且我无法想象何时需要内部 获取 但不 设置 设置 但不 获取 私有字段:

private string Password { get; }

要么

private string Password { set; }

但是也许有一个带有 嵌套/继承类 的用例,或者一个get / set可能包含 逻辑
而不是仅仅返回属性的值,尽管我倾向于使属性严格保持简单,让显式方法执行任何逻辑,例如GetEncodedPassword()

是否有人出于某种原因在C#中使用私有属性,还是仅仅是在技术上尚未实际使用的代码构造之一?

附录

不错的答案,仔细阅读它们,我便剔除了私人财产的这些用途:

  • 当需要延迟加载私有字段时
  • 当专用字段需要额外的逻辑或为计算值时
  • 因为私有字段可能很难调试
  • 为了“向自己出示合同”
  • 作为序列化的一部分在内部转换/简化暴露的属性
  • 包装全局变量以在您的类中使用

阅读 418

收藏
2020-05-19

共1个答案

一尘不染

如果需要缓存值并想延迟加载它,则可以使用它们。

private string _password;
private string Password
{
    get
    {
        if (_password == null)
        {
            _password = CallExpensiveOperation();
        }

        return _password;
    }
}
2020-05-19