为什么XContainer.Nodes()和XElement.Attributes()是方法(不是属性)?

时间:2013-10-16 12:45:45

标签: c# .net xml linq-to-xml

现在是一个理论问题。

据我所知,方法用于实现某种行为,属性用于保留对象的某些状态。

我发现XContainer.Nodes()以及XElement.Attributes()是作为方法实现的,而不是属性。而且,恕我直言,应该作为属性实现的其他方法:XNode.ElementsAfterSelf()XNode.ElementsBeforeSelf() XNode.NodesAfterSelf()等等。

因此,返回IEnumerable of something的所有内容都是作为Linq to XML中的方法(而不是属性)实现的。

这是什么原因?我的意思是它是否适用于某些特定情况,或者仅仅是例如String.Split()方法的错误,它返回char array而不是更期望的IEnumerable<char>

1 个答案:

答案 0 :(得分:1)

引用Microsoft "Choosing Between Properties and Methods"

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

如果成员代表该类型的逻辑属性,请考虑使用属性。

例如,BorderStyle是一个属性,因为边框的样式是ListView的属性。

如果属性的值存储在进程内存中,并且属性只提供对值的访问,请使用属性而不是方法。

您还可以阅读"Properties vs Methods" here

我喜欢上一个链接中的这个解释

  

操作非常昂贵,您希望与用户沟通,他们应该考虑缓存结果。