亲爱的,哪一个是使用C#的最佳实践?为什么? 1。
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
2
public string Name { get; set; }
3
protected string name;
public string Name
{
get { return name; }
set { name = value; }
}
4。 请添加......
答案 0 :(得分:14)
小片 1 和 2 都很好。第二种方法是在不需要访问底层字段时编写第一种方法。
但是,Snippet 3 通常应该避免(除非您有特殊原因需要它),因为字段应该几乎总是私有的。如果你需要提供一种不同的方法来为后代类设置(不太可能),那么你可以使用方法或其他属性。
请记住,受保护的成员本质上只是一个稍微受限制的公共成员,因为只要它位于后代类中,它就可以被客户端代码访问。这意味着客户端代码可以直接绑定到类的实现而不是它的接口,这是坏事!
答案 1 :(得分:11)
从第二个片段开始,即
public string Name { get; set; }
当您需要添加验证时,将其更改为第一个代码段的形式,或者在设置值时执行某些逻辑。
我会避免使用最后一个选项,因为它允许覆盖类直接访问将您绑定到特定实现的支持字段(这也意味着可以绕过您可爱的验证)
答案 2 :(得分:0)
标准格式通常为:
private string name;
public string Name
{
get { return name;}
set { name= value; }
}
字段将作为标准做法私有。您的属性将具有public
保护修饰符。
答案 3 :(得分:0)
公开财产,是为了避免将类的公共领域暴露给消费者。而属性允许您控制消费者使用它的方式(通过get& set)。
第一个没问题,在你的第二个样本中(使用公共和受保护的)你就是打破了......
答案 4 :(得分:0)
public string Name {get;set}
第二个示例是自动属性,通常在getter和setter中没有任何逻辑时使用。它也是写第一个例子的简短形式。
第三个示例有一个protected
支持字段,因此可以通过子类直接访问支持字段。
根据您的目标选择格式。另外,请考虑询问其他团队成员是否已达成一致的格式。
答案 5 :(得分:0)
在我编写的应用程序中,如果getter和setter并不比你的例子复杂,你可能希望尽可能地减少代码的可读性,因此简写方法非常有用。另一方面,如果在getter和setter中实现更复杂的逻辑(例如验证或解析某种类型),则需要确保没有用户类绕过您的逻辑。
另外,正如Binary Worner在评论中指出的那样,这取决于你需要什么,以及你想要什么。您知道private
,protected
和public
之间的区别,因此您也知道您可以和不能对您的班级做什么,具体取决于您选择的班级。哪一个是“最好的”完全取决于您希望(并且不希望)允许其他类使用此行为的行为。
答案 6 :(得分:0)
将自动属性(N°2)写为默认值,除非你的getter / setter中有某种逻辑,否则属性(或字段)就没有了 - 你必须同意一个直接的公共属性访问其私有字段与公共字段(或auto-propeprty)相同。
答案 7 :(得分:0)
#region LinkURL
private string _LinkURL = String.Empty;
public string LinkURL
{
get { return _LinkURL; }
set { _LinkURL = value; }
}
#endregion LinkURL
这种方式很容易生成代码。例如,如果你有Excel属性或db表,你必须实现一个类,你可以检查这个正则表达式tip:
答案 8 :(得分:0)
通过字段或get操作读取两个属性的最佳做法是什么?我自己的结论是从现场获得,因为这是你想要处理的信息,只需要问我是否认为错了。
private string _key;
private string _subKey;
private string _fullKey;
public string SubKey
{
get
{
return _key;
}
set
{
_key = value;
}
}
public string SubKey
{
get
{
return _subKey;
}
set
{
_subKey = value;
}
}
1。
public string FullKey
{
get
{
return _subKey + _key;
}
}
2
public string FullKey{
get
{
return SubKey + Key
}
}