编码风格和性能

时间:2011-01-11 21:59:32

标签: c# properties coding-style

如果我在类中定义了如下属性:

private int mSomeNumber;
public int SomeNumber
{
   get
   {
      return mSomeNumber;
   }
}

并且在同一个类中,我很好奇人们是否使用成员变量,或者您是否使用该属性。例如:

public void DoSomething()
{
   if(mSomeNumber == 0)  // This way?
   //if(SomeNumber == 0) // Or this way?
   {
      // Do something
   }
}

我认为直接使用成员变量可能会保存一个调用,但我想知道该属性是否会被编译为同一个东西。有谁知道它是否或“标准”可能是什么?

5 个答案:

答案 0 :(得分:4)

现在,我们这样做:

public int SomeNumber
{
   get;
   private set;
}

因此,我们不必费心声明私有成员字段。

声明成员字段并直接访问可能会保存(可能是优化的)属性调用,但它也会错过该属性旨在提供的任何检查和平衡。

答案 1 :(得分:4)

您应该使用该属性,除非您对变通方法有特定要求(例如Henk's answer)。

这样,您可以在不更改调用代码的情况下更改属性getter中的功能。例如,你的getter可能会格式化一个更漂亮的返回值的值,或者用常量递增它,或者它只是从else中包装状态(在嵌套对象中)等等。 / p>

答案 2 :(得分:1)

差异,如果有的话,将会非常小。因此,从“绩效”角度来看它是错误的。如果你确实使用过这个成员那么重要,你可能应该把它写得完全不同。

因此,主要标准是可读性和可靠性。这意味着使用该属性并使用所涉及的任何(未来)业务逻辑。

仅在极少数情况下才会使用支持字段(例如避免验证规则或更改通知)。

因为这种情况很少见,这意味着我们通常会没有支持领域,比如@ Frederic的回答。

答案 3 :(得分:0)

使用被认为是最佳实践的属性,对于.net和C#世界来说是一个标准的东西。这与使用属性而不是公共合同中的字段具有相同的好处。

Jon Skeet在他的文章Why Properties Matter中描述了你收到的好处。

答案 4 :(得分:0)

由于这些属性几乎总是由JIT内联,因此不可能导致性能上的任何差异。

在原始案例中声明支持字段与使用Frédéric的回复中的自动属性之间绝对没有区别。两种情况都有支持字段(隐藏在自动情况下)。

阅读其他有关物品的信息。