3

我什么时候应该更喜欢属性而不是方法?因为当我使用属性时,下面的代码更具可读性。

string agency = base.GetAgencyDetails();

string agency = base.Agency; //I could write same logic in getter of the property.
4

5 回答 5

11

就个人而言,我会遵循MSDN 指南

一般来说,方法代表动作,属性代表数据。属性旨在像字段一样使用,这意味着属性不应计算复杂或产生副作用。如果不违反以下准则,请考虑使用属性而不是方法,因为经验不足的开发人员会发现属性更易于使用。

如果您考虑一下,这是非常有意义的,一种方法将更适合可能以某种方式改变数据的东西,并且当您检索某些数据并缓存它时,属性是完美的。

如果您使用的是显式支持的属性,您甚至可以在转换的情况下将两者结合起来:

private ObjType _myObjWithStringification;
private string _stringRepOfData;

public string StringRepresentation
{
    get {
        if (_stringRepOfData == null) {
            _stringRepOfData = _myObjWithStringification.ToString();
        }
        return _stringRepOfData;
    }
}

回复:您的可维护性评论,我不确定它是否非常有效。如果你F12要进入你正在使用的属性的声明,无论如何你都会直接进入getter,就像你使用方法时你会进入方法体一样。

我不确定假设属性不会有任何自定义检索逻辑是否安全。

于 2013-03-01T18:15:11.920 回答
2

如果你必须写很多逻辑,那么方法,而不是属性。

如果您在逻辑中进行方法调用,则再次调用方法,而不是属性。

于 2013-03-01T18:14:36.767 回答
0

参考在这里输入链接描述

一般来说,方法代表动作,属性代表数据。属性旨在像字段一样使用,这意味着属性不应计算复杂或产生副作用。如果不违反以下准则,请考虑使用属性而不是方法,因为经验不足的开发人员会发现属性更易于使用。

于 2013-03-01T18:15:35.480 回答
0

属性只是围绕支持字段的一组包装方法(get/set)。

首选方法是使用属性,这样您的外部合约就不会更改,但是您可以稍后向属性方法添加额外的逻辑或验证。

还使代码更清洁作为奖励。

于 2013-03-01T18:16:15.147 回答
0

它们的核心属性旨在成为字段访问的包装器,并提供普通字段和计算字段之间的统一。任何类似于字段访问的操作都应尽可能表示为属性。

这不是一个绝对的规则,而是一个指导方针。很难为方法上的属性制定明确的规则。然而,反过来是不正确的;何时应该优先使用方法而不是属性,这一点非常清楚。

  • 该操作对类型有明显的副作用。例如,如果它明显地改变了对象中的任何状态,则该操作永远不应该是一个属性。
  • 长时间运行的操作,包括昂贵的操作,永远不应该是属性
于 2013-03-01T18:19:29.417 回答