我不明白的是
我知道自动属性可以使事情变得容易。
一般:
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
具有自动属性:
public string Name { get; set; }
但是,如果我们可以像在auto属性中那样将实例变量声明为public,为什么不将普通版本中的实例变量也声明为public?
那么这与以前的完全一样吗?:
public string name;
public string Name
{
get { return name; }
set { name = value; }
}
尽管可以做到,但请想象一下使用此API并看到您拥有object.Name
和object.name
。您怎么知道要使用哪个?
通常,公共领域被认为是不好的做法,因为您是在授予该类别的用户全部领域的权力。即使auto属性提供相同的功能,也可以更轻松地向setter或getter添加计算/过滤器,或者完全删除setter或getter。
通过公开支持字段,您可以使用户完全忽略已设置的任何验证。
我认为您在这里可能会感到困惑。
如您在这个sharplab.io示例中看到的那样,
public string Name { get; set; }
编译成:
private string <Name>k__BackingField;
public string Name
{
get { return this.<Name>k__BackingField; }
set { this.<Name>k__BackingField = value; }
}
因此,您可以看到,实际字段存在,但是每个人都无法访问它,因此它就像超级私有。但是,有时您可能不希望这样做。我碰到过几次,实际上我希望属性的类能够访问私有支持字段,以避免调用set和get,避免无限循环,尽管我觉得这可能是一个坏习惯,并且应该避免。
但要注意的是,汽车属性确实在幕后有一个私有字段,而不是其自身的私有字段。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句