什么时候我更喜欢财产而不是方法?

时间:2013-03-01 18:11:50

标签: c# .net c#-4.0

我应该何时更喜欢财产而不是方法?因为当我使用property时,以下代码更具可读性。

string agency = base.GetAgencyDetails();

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

5 个答案:

答案 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)

来自enter link description here

的参考号

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

答案 3 :(得分:0)

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

首选方法是使用属性,以便外部合同不会更改,但稍后您可以向属性方法添加其他逻辑或验证。

还可以使代码更清晰。

答案 4 :(得分:0)

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

这不是一个绝对的规则,它是一个指导方针。对于什么应该是方法的属性,很难制定明确的规则。但事实恰恰相反;一个方法应该优先于一个属性是非常清楚的。

  • 该操作对类型有明显的副作用。例如,如果它明显地改变了对象中的任何状态,则操作永远不应该是属性。
  • 包括昂贵操作在内的长时间运行不应该是属性