为什么字段可以用作out / ref参数而不是属性?

时间:2013-12-18 19:10:16

标签: c# oop properties

当我们将Fields作为out / ref参数传递时,是什么使属性和字段不同。这两者之间的区别是内存分配吗?

3 个答案:

答案 0 :(得分:4)

最大的区别是,属性或索引器可能无法作为refout参数(demo)传递。

这是因为属性不一定具有后备存储 - 例如,可以动态计算属性。

由于传递outref参数需要在内存中获取变量的位置,并且由于属性缺少此类位置,因此该语言禁止将属性作为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