当我们将Fields作为out / ref参数传递时,是什么使属性和字段不同。这两者之间的区别是内存分配吗?
答案 0 :(得分:4)
最大的区别是,属性或索引器可能无法作为ref
或out
参数(demo)传递。
这是因为属性不一定具有后备存储 - 例如,可以动态计算属性。
由于传递out
和ref
参数需要在内存中获取变量的位置,并且由于属性缺少此类位置,因此该语言禁止将属性作为ref
/ out
参数传递。
答案 1 :(得分:2)
属性根本不像字段,它们就像方法一样。
这是一个领域;它没有任何逻辑。
private int _afield;
这是一个定义吸气剂和定位器的属性 getter和setter是方法。
public int AField
{
get
{
return _aField;
}
set
{
_aField = value;
}
}
这是默认属性 它与之前的属性和字段完全相同,只不过它为您做了很多工作
public int BField { get; set; }
答案 2 :(得分:0)
描述属性的最佳方式是“getter”和“setter”方法的成语。
当您访问某个属性时,实际上是在调用“get”方法。
<强>爪哇强>
private int _myField;
public int getMyProperty()
{
return _myField;
}
public int setMyProperty(int value)
{
_myField = value;
}
int x = getMyProperty(); // Obviously cannot be marked as "out" or "ref"
<强> C#强>
private int _myField;
public int MyProperty
{
get{return _myField;}
set{_myField = value;}
}
int x = MyProperty; // Cannot be marked as "out" or "ref" because it is actually a method call