我刚刚意识到C# 属性construct也可以与私有访问修饰符一起使用:
private string Password { get; set; }
虽然这在技术上很有趣,但我不能想象我什么时候会使用它,因为私有字段甚至涉及更少的仪式
private string _password;
我无法想象什么时候我需要在内部获取而不是 set或set 而不是 get一个私有字段:
private string Password { get; }
或
private string Password { set; }
但也许有一个使用嵌套/继承类的用例,或者get/set可能包含逻辑,而不仅仅是返回属性的值,尽管我倾向于保持属性严格简单,并让显式方法执行任何逻辑,例如GetEncodedPassword()
。
有没有人出于某种原因在C#中使用私有属性,或者它只是那些构造之一?
附录
答案很好,我通读了一遍,挑选了以下私有属性的用法:
发布于 2010-07-22 23:05:42
如果我需要缓存一个值并且想要延迟加载它,我会使用它们。
private string _password;
private string Password
{
get
{
if (_password == null)
{
_password = CallExpensiveOperation();
}
return _password;
}
}
发布于 2010-07-22 23:16:34
正如其他人所提到的,在我的代码中,这一点的主要用途是延迟初始化。
私有属性胜过字段的另一个原因是私有属性比私有字段更容易调试。我经常想知道这样的事情:“这个字段被意外地设置了;谁是第一个设置这个字段的调用者?”如果你只需要在setter上设置一个断点,然后点击go,这就容易多了。你可以把日志放在那里。您可以将性能指标放入其中。您可以放置在调试版本中运行的一致性检查。
基本上,它归结为:代码远比数据更强大。任何能让我写出我需要的代码的技术都是好的。字段不允许您在其中编写代码,但属性可以。
发布于 2010-07-22 22:56:05
可能存在嵌套/继承类的用例,或者get/set可能包含逻辑而不仅仅是返回属性的值
即使我不需要在属性的getter或setter上使用逻辑,我个人也会使用它。使用属性,即使是私有属性,也有助于代码的未来保护,这样如果需要,您可以在以后将逻辑添加到getter中。
如果我觉得一个属性最终可能需要额外的逻辑,我有时会将它包装到一个私有属性中,而不是使用一个字段,这样我以后就不必更改我的代码。
在半相关的情况下(尽管与您的问题不同),我经常在公共属性上使用私有setter:
public string Password
{
get;
private set;
}
这为您提供了一个公共的getter,但保留了setter的私有。
https://stackoverflow.com/questions/3310186
复制相似问题