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

Why can fields be used as out/ref parameters and not properties?

本问题已经有最佳答案,请猛点这里访问。

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


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

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

由于传递outref参数需要取变量在内存中的位置,并且由于属性缺少该位置,因此语言禁止传递refout参数等属性。


属性根本不像字段,它们就像方法。

这是一个字段;它没有任何逻辑。

1
private int _afield;

这是一个属性,它定义了getter和setter。getter和setter是方法。

1
2
3
4
5
6
7
8
9
10
11
public int AField
{
    get
    {
        return _aField;
    }
    set
    {
        _aField = value;
    }
}

这是默认属性。它和以前的属性和字段完全一样,只是它为您做了很多工作

2


描述属性的最佳方法是使用"getter"和"setter"方法的习惯用法。

当您访问一个属性时,实际上是在调用"get"方法。

爪哇

1
2
3
4
5
6
7
8
9
10
11
12
13
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.*

4