2013-03-14 109 views
-3

我有一个财产收到int,每个获得数字将返回int,然后我需要增加一个int
如果我这样做:C#返回int并增加返回值

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

它不是好的,因为如果我有7000开始,它将与7001
我怎么能恢复后增加开始?

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

+4

你甚至尝试自己的建议吗? stackoverflow不是你的个人调试器军队。 – 2013-03-14 12:29:59

回答

2

我会避免这样做。

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

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

MSDN来自:

一般而言,方法代表动作和属性表示数据。 属性用于字段,这意味着属性不应该是 计算复杂或产生副作用

第一个副作用,你可以看到的是,会默默地递增的情况下你的电话号码调试器,你有一块手表你的财产......

7

首先,当前的代码会抛出StackOverflowException

为什么?因为它将返回Number,但返回Number它将读取Number值。所以它会无限地拨打get

二,使用Postfix increment operator来解决你的主要问题。

试试这个:

private int number; 

    public int Number 
    { 
     set { number = value; } 
     get 
     { 
      return number++; 
     } 
    } 
+0

感谢您的回答 – ilansch 2013-03-14 12:31:12

+0

不编译,您不能将自动属性与手动创建的属性混合。 – ken2k 2013-03-14 12:33:42

+0

@ ken2k:我刚刚编辑了我的答案。 – 2013-03-14 12:35:47