-3

我有一个接收 的属性,int每个 get Number 都会返回int,然后我需要将 加int一。
如果我这样做:

    public int Number
    {
        set;
        get
        {
            Number++;
            return Number;
        }
    }

它不好,因为如果我从7000开始,它将从7001开始。
返回后如何增加?

我可以使用return Number++;吗?

4

2 回答 2

7

首先,您当前的代码将抛出StackOverflowException

为什么?因为它会返回Number,但要返回Number它会读取Number值。所以它会get无限调用。

其次,使用Postfix 增量运算符来解决您的主要问题。

试试这个:

    private int number;

    public int Number
    {
        set { number = value; }
        get
        {
            return number++;
        }
    }
于 2013-03-14T12:29:01.283 回答
2

我会避免这样做。

关于属性的第一个最佳实践是一致性,即当调用 getter 时,您的属性不应该修改您的类的成员。基本上,对 getter 的多次连续调用应该返回相同的值(有例外,例如DateTime.Now,但那些是边缘情况)。

如果你想计算一个操作(在你的情况下是增量),你可能应该使用一个函数。

来自MSDN

一般来说,方法代表动作,属性代表数据。属性像字段一样使用,这意味着属性不应计算复杂或产生副作用

您可以看到的第一个副作用是调试器会默默地增加您的号码,以防您对您的财产进行监视......

于 2013-03-14T12:40:11.983 回答