我刚刚意识到C#属性构造也可以与私有访问修饰符一起使用:
private string Password { get; set; }
Run Code Online (Sandbox Code Playgroud)
虽然这在技术上很有意思,但我无法想象何时使用它,因为私人领域涉及更少的仪式:
private string _password;
Run Code Online (Sandbox Code Playgroud)
我无法想象什么时候我需要能够内部获取但不能设置或设置但不能获得私有字段:
private string Password { get; }
Run Code Online (Sandbox Code Playgroud)
要么
private string Password { set; }
Run Code Online (Sandbox Code Playgroud)
但也许有一个嵌套/继承类的用例,或者可能是get/set可能包含逻辑而不是仅仅返回属性的值,尽管我倾向于保持属性严格简单并让显式方法做任何逻辑,例如GetEncodedPassword().
是否有人出于任何原因在C#中使用私有属性,或者它只是那些技术上可能但很少使用的实际代码构造之一?
很好的答案,阅读它们我剔除了私人财产的这些用途:
这是我在代码中一直在努力解决的问题.假设我们有以下代码:
public class MyClass {
private string _myVariable;
public string MyVariable {
get { return _myVariable; }
set { _myVariable = value; }
}
public void MyMethod() {
string usingPrivateMember = _myVariable; // method A
string usingPublicProperty = MyVariable; // method B
}
}
Run Code Online (Sandbox Code Playgroud)
哪种方式更正确 - 方法A还是B?我总是对此感到不满.方法A似乎会快一点,因为它不需要在获取真实变量之前访问属性.但是,方法B更安全,因为如果MyVariable的getter添加了业务逻辑,即使没有当前的业务逻辑,也可以通过调用它来保证安全.
普遍的共识是什么?