【问题标题】:C# getter setter default valueC# getter setter 默认值
【发布时间】:2018-05-13 02:47:21
【问题描述】:

如何设置 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、 或部分

【问题讨论】:

  • getter 和 setter 递归调用自己。
  • 我尝试将 getter 主体留空,以便它可以调用自身,但出现此错误:“'spin.get': not all code paths return a value”
  • 这样不行。一旦你实现了它们中的任何一个,C# 就不会生成一个支持字段,你必须同时实现这两个(和一个支持字段)。
  • 所以支持字段是必需的。

标签: c# unity3d getter-setter


【解决方案1】:

StackOverflowException 是由于您的this.spin = value; 行递归设置spin

改为使用支持字段:

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

private bool _spin;
private bool spinBack;

【讨论】:

  • 我正在考虑使用支持字段。我想看看是否可以在自己身上使用 setter 和 getter。
  • @user1105430 好的,但是正如您所看到的,它会递归并导致上述错误。有什么特殊原因不能使用自己的支持字段吗?
  • spinback 似乎没用。如果 value 为 false,则将其设置为 true,如果 value 为 true,则将保持为 true。所以只有在真正的值出现之前它才是错误的。奇怪但为什么不......所以你可以把它取下来并检查 !Spin 也许。
  • 是的,spinback 的功能不清楚,所以就让它保持原样。一个有效的观点,尽管如此。 :)
  • 我没有特别的理由不能使用支持字段。我只是想知道 C# 是否允许您在没有 C# 的情况下这样做。这只是为了更好地了解 getter 和 setter。
猜你喜欢
  • 2014-02-19
  • 2015-01-23
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多