我有一个获得int
的属性,每个获取号码都会返回int
,然后我需要将int
增加一个。
如果我喜欢这样:
public int Number
{
set;
get
{
Number++;
return Number;
}
}
它不好,因为如果我从7000开始,它将从7001开始 返回后如何增加?
我可以使用return Number++;
吗?
答案 0 :(得分:7)
首先,您当前的代码将抛出StackOverflowException
为什么呢?因为它会返回Number
,但要返回Number
,它会读取Number
值。所以它会无限地调用get
。
其次,使用Postfix increment operator解决您的主要问题。
试试这个:
private int number;
public int Number
{
set { number = value; }
get
{
return number++;
}
}
答案 1 :(得分:2)
我会避免这样做。
关于属性的第一个最佳实践是一致性,即,当调用getter时,您的proprety不应该修改类的成员。基本上,多次连续调用getter应返回相同的值(有例外,例如DateTime.Now
,但这些是边缘情况)。
如果你想计算一个操作(在你的情况下增加),你可能应该使用一个函数。
来自MSDN:
通常,方法表示操作,属性表示数据。 属性像字段一样使用,这意味着属性不应该 计算复杂的或产生副作用。
您可以看到的第一个副作用是调试器,如果您对自己的财产有监视,它会默默地增加您的号码...