c# - 在 C# 中使用私有(private)属性有什么理由吗?

标签 c# properties access-modifiers

我刚刚意识到 C# property 构造 也可以与 private 访问修饰符一起使用:

private string Password { get; set; }

虽然这在技术上很有趣,但我无法想象我什么时候会使用它,因为私有(private)领域涉及更少的仪式:

private string _password;

而且我无法想象什么时候我需要能够在内部get 而不是set设置但不获取私有(private)字段:

private string Password { get; }

private string Password { set; }

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

是否有人出于任何原因在 C# 中使用私有(private)属性,或者它只是技术上可行但很少在实际代码中使用的结构之一?

附录

很好的答案,通读它们我剔除了私有(private)属性的这些用途:

  • 当需要延迟加载私有(private)字段时
  • 当私有(private)字段需要额外的逻辑或者是计算值时
  • 因为私有(private)字段很难调试
  • 为了“向自己出示契约(Contract)”
  • 作为序列化的一部分在内部转换/简化公开的属性
  • 包装要在您的类中使用的全局变量

最佳答案

如果我需要缓存一个值并想延迟加载它,我会使用它们。

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

        return _password;
    }
}

关于c# - 在 C# 中使用私有(private)属性有什么理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310186/

相关文章:

c# - DataGridView 覆盖顶部,左侧标题单元格单击(全选)

c# - 为什么 C#.net 中的表达式主体不能使用 int、double 或 bool 类型的属性?

java - static 修饰符是否会更改 java 中类成员的访问级别?

c# - 如何在 WPF 中获取屏幕的正确 DPI?

c# - 从点列表下载相交但不复制 map 下载图 block ?

Java - 配置对象属性

objective-c - 我什么时候应该明确使用@synthesize?

java - "package private"成员访问不是默认(无修饰符)访问的同义词吗?

java - 是否可以达到以下访问级别

c# - 如何在C#中获取机器的IP地址