我理解差异。两者之间。并阅读与此相关的主题。我的问题是关于任何性能提升。我曾经使用局部变量创建属性。每当我在类中使用属性时,我都会使用局部变量而不是属性。我认为这样做会有一点好处,而不是调用属性,然后调用局部变量的属性。在自动属性中是不可能的。我的假设正确吗?它对我的方法有什么好处(可能很小)吗?
样本
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 + ")
}
}
最佳答案
无论您使用编译器转换为方法调用的自动属性..还是直接访问支持字段..JIT 编译器很可能会内联字段访问。
编辑:
自动属性被编译成方法调用。所以这个:
public string Property { get; set; }
..变成:
private string _property;
public string get_Property() {
return _property;
}
public void set_Property(string value) {
_property = value;
}
当 JIT compiler看到这一点,它很可能会内联字段访问(它确实是一个主要候选人)。因此,如果您这样做:
Property = "some value";
它不会生成这个:
set_Property("some value");
这样做的可能性更大:
_property = "some value";
所以,真的,根本没有惩罚。重要的是要注意这是特定于实现的(特定于 JIT 编译器实现)..但老实说,如果那种东西不是内联的候选者,我不知道什么是内联!
关于c# - 自动属性与具有可变性能考虑的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566026/