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