C#getter setter默认值

C#getter setter默认值,c#,unity3d,getter-setter,C#,Unity3d,Getter Setter,如何设置setter-getter的默认值?我想在设置setter时执行一些操作 public bool spin { get { return this.spin; } set { if (value == false) this.spinBack = true; this.spin = value; } } private bool spinBack; 我在Unity3D上尝试了这一点,但在尝试这样做时出现了此错误 StackOver

如何设置setter-getter的默认值?我想在设置setter时执行一些操作

public bool spin {
    get { return this.spin; }
    set {
        if (value == false) this.spinBack = true;
        this.spin = value;
    }
}
private bool spinBack;
我在Unity3D上尝试了这一点,但在尝试这样做时出现了此错误

StackOverflowException:请求的操作导致堆栈溢出 溢出

我试着设置getter并将getter保留为默认值,如下所示

public bool spin {
    get;
    set {
        if (value == false) this.spinBack = true;
        this.spin = value;
    }
}
private bool spinBack;
但是我得到了这个错误

“spin.get”必须有一个主体,因为它没有标记为abstract,extern, 或部分


StackOverflowException
是由于您的
this.spin=值引起的递归设置的行
spin

改为使用支持字段:

public bool Spin 
{
    get { return _spin; }
    set {
        if (value == false) this.spinBack = true;
        _spin = value;
    }
}

private bool _spin;
private bool spinBack;

getter和setter递归地调用它们自己。我尝试将getter body留空以便它可以调用自己,但我得到了以下错误:“'spin.get':并非所有代码路径都返回一个值”这样不行。一旦你实现了它们中的任何一个,C#就不会生成一个支持字段,你必须同时实现这两个字段(和一个支持字段)。所以支持字段是必需的。我正在考虑使用一个支持字段。我想看看是否可以在自己身上使用setter和getter。@user1105430可以,但正如您所看到的,它将递归并导致上述错误。有什么特别的原因不能使用您自己的支持字段吗?回滚看起来没用。如果值为false,则将其设置为true;如果值为true,则将保持true。因此,只有在真正的值出现之前,它才是假的。奇怪,但为什么不…所以你可以把它拿下来检查一下!Spin maybe.Yeh,
回滚
的功能不清楚,所以我们只是保持原样。尽管如此,这是一个正确的观点。:)我没有特别的理由不能使用支持字段。我只是想知道C#是否允许你在没有一个的情况下这样做。这只是为了更好地理解接球手和二传手。