我应该何时更喜欢财产而不是方法?因为当我使用property时,以下代码更具可读性。
string agency = base.GetAgencyDetails();
string agency = base.Agency; //I could write same logic in getter of the property.
答案 0 :(得分:11)
就个人而言,我会关注MSDN Guidelines。
通常,方法表示操作,属性表示数据。属性意味着像字段一样使用,这意味着属性不应该在计算上复杂或产生副作用。如果它没有违反以下准则,请考虑使用属性而不是方法,因为经验不足的开发人员会发现更易于使用的属性。
如果你考虑它会很有意义,一种方法更适合以某种方式可能改变数据的东西,并且当你检索一些数据时,属性是完美的并缓存它。
如果您正在使用显式支持的属性,您甚至可以在转换的情况下将两者结合使用:
private ObjType _myObjWithStringification;
private string _stringRepOfData;
public string StringRepresentation
{
get {
if (_stringRepOfData == null) {
_stringRepOfData = _myObjWithStringification.ToString();
}
return _stringRepOfData;
}
}
Re:您的可维护性评论,我不确定它是否非常有效。如果您要点击 F12 来查看您正在使用的属性的声明,那么无论如何你都会直接进入get
ter,就像你去找方法一样身体,如果你使用了一种方法。
我不确定假设属性不会有任何自定义检索逻辑是安全的。
答案 1 :(得分:2)
如果你必须编写很多逻辑,那么方法,而不是属性。
如果你在逻辑中进行方法调用,那么再次方法,而不是属性。
答案 2 :(得分:0)
通常,方法表示操作,属性表示数据。属性意味着像字段一样使用,这意味着属性不应该在计算上复杂或产生副作用。如果它没有违反以下准则,请考虑使用属性而不是方法,因为经验不足的开发人员会发现更易于使用的属性。
答案 3 :(得分:0)
属性只是支持字段周围的一组包装器方法(get / set)。
首选方法是使用属性,以便外部合同不会更改,但稍后您可以向属性方法添加其他逻辑或验证。
还可以使代码更清晰。
答案 4 :(得分:0)
它们的核心属性是对字段访问的包装,并提供正常字段和计算字段之间的统一。任何类似于字段访问的操作都应尽可能表示为属性。
这不是一个绝对的规则,它是一个指导方针。对于什么应该是方法的属性,很难制定明确的规则。但事实恰恰相反;一个方法应该优先于一个属性是非常清楚的。