我理解差异。两者之间。并阅读与此相关的主题。我的问题是关于任何性能提升。我曾经用局部变量创建属性。每当我在类中使用属性时,我都会使用局部变量而不是属性。我认为这有一点好处,而不是调用属性,然后调用局部变量的属性。在自动属性中,这是不可能的。我的假设正确吗?它在我的方法中是否有任何收益(可能很小)?
样本
Public class class1
{
private int _someField;
public int SomeField
{
get{return _someField;}
set {_someField = value;}
}
Public void Insert()
{
str= "insert into table values(" + SomeField + ")
//or is it better to use like this?
str= "insert into table values(" + _someField + ")
}
}
Run Code Online (Sandbox Code Playgroud)
无论您使用编译器转换为方法调用的自动属性.. 还是直接访问支持字段.. 无论如何,JIT 编译器很可能会内联该字段访问。
编辑:
自动属性被编译成方法调用。所以这:
public string Property { get; set; }
Run Code Online (Sandbox Code Playgroud)
..变成:
private string _property;
public string get_Property() {
return _property;
}
public void set_Property(string value) {
_property = value;
}
Run Code Online (Sandbox Code Playgroud)
当JIT 编译器看到这一点时,它很可能会内联字段访问(它确实是一个主要的候选者)。因此,如果您这样做:
Property = "some value";
Run Code Online (Sandbox Code Playgroud)
它不会产生这个:
set_Property("some value");
Run Code Online (Sandbox Code Playgroud)
更有可能这样做:
_property = "some value";
Run Code Online (Sandbox Code Playgroud)
所以,真的,根本没有惩罚。重要的是要注意,这是特定于实现的(特定于 JIT 编译器实现)。但老实说,如果这种事情不是内联的候选者,我不知道是什么!