如果我在类中定义了如下属性:
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
}
}
我认为直接使用成员变量可能会保存一个调用,但我想知道该属性是否会被编译为同一个东西。有谁知道它是否或“标准”可能是什么?
答案 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的回复中的自动属性之间绝对没有区别。两种情况都有支持字段(隐藏在自动情况下)。
阅读其他有关物品的信息。