11

我有一个包含一组方法的类,我想知道使用方法而不是属性是否有任何性能奖励?

一些方法相当复杂,但基本上返回一个 IEnumerable 对象集合,而另一些则是一个简单的return values.Where(x => x.property == "comparison")Linq 查询。

例子

方法:

public IEnumerable<PenDataRow> ActivePens() => Pens.Where(x => x.Status == "Active");

财产:

public IEnumerable<PenDataRow> ActivePens => Pens.Where(x => x.Status == "Active");

将它们标记为属性或方法会更好吗?

4

4 回答 4

17

属性在后台作为方法实现,因此绝对没有性能差异。在属性和方法之间进行选择的准则是语义的。

于 2012-09-04T15:26:35.457 回答
3

属性只是具有特定命名和元数据的一两个方法。

因此开销是相同的,JIT 内联的机会也是一样的。

于 2012-09-04T15:27:36.223 回答
3

本身没有性能差异,但我认为您班级的用户可能“期望”有一个。也就是说,类似的属性ActivePens可能被认为比类似的方法“更轻” GetActivePens()。我尝试编写方法来获取更昂贵的事物的值。这是非常主观的。

也可能存在调试器影响 - 将鼠标悬停在调试器中的类中的属性上可能会调用该属性并引发昂贵的操作来显示工具提示。

于 2012-09-04T15:30:33.530 回答
1

不,没有任何性能提升,因为它们也是以更优雅的方式帮助公开您的私有字段的方法。

于 2012-09-04T15:27:30.003 回答