模块化和价值回归方法的问题

时间:2013-10-22 23:15:43

标签: c# methods

我对C#很陌生,传递参数,模块化和价值返回方法对我来说非常合适。

我正试图让两个按钮相互交互。

一个按钮上有一个计数器。每次单击时,以1开头的变量都会添加另一个变量。

另一个按钮显示另一个按钮上的计数器所在的数字。

我希望这是有道理的。

    private void button_Click(object sender, EventArgs e)
    {
    }
    private int TotalCount(int count)
    {
        return count += 1;
    }

    private void buttonCount_Click(object sender, EventArgs e)
    {
        int totalcount;
        int count;

        totalcount = TotalCount(ref count);

        MessageBox.Show("The number clicked is: " + totalcount);
    }

3 个答案:

答案 0 :(得分:1)

正如Garry Vass指出在这种情况下不需要引用参数但是如果使用引用参数,则方法的定义和调用都需要指定ref

 private int TotalCount(ref int count)
 {
        return count += 1;
 }

这是一个更完整地解释ref关键字的参考。

http://msdn.microsoft.com/en-us/library/14akc2c7.aspx

答案 1 :(得分:1)

你需要让'count'成为一个实例变量......

int count = 0;
private void button_Click(object sender, EventArgs e)
{
}
private int TotalCount()
{
    ++count;
    return count;
}

private void buttonCount_Click(object sender, EventArgs e)
{
    int totalcount = TotalCount();

    MessageBox.Show("The number clicked is: " + totalcount);
}

您将'count'声明为局部变量,因此在方法的每个条目上初始化它,因此该值不是持久的。在这种情况下不需要引用参数,因此它们已被删除。

答案 2 :(得分:0)

尽管Gary Vass认为count需要是一个实例变量,但我不认为他的答案是编码它的正确方法。

方法名称非常重要,特别是随着代码库的增长,你应该遵循“最小惊讶”的原则。在这种情况下,方法的名称应该表明它将做什么,它不应该有隐藏的副作用。见http://www.atalasoft.com/cs/blogs/stevehawley/archive/2006/02/27/9590.aspx

名称TotalCount表示它将返回总计数。该名称没有任何内容表明它实际上将修改数据。

我将采取的路线是:

int count = 0;

private int IncrementCount() {
  count++;
  return count;
}

private void buttonCount_Click(object sender, EventArgs e)
{
    int totalcount = IncrementCount();

    MessageBox.Show("The number clicked is: " + totalcount);
}

差异很微妙。但是,有人浏览只需 buttonCount_Click方法就可以很好地了解IncrementCount()做什么,而无需实际调查该代码。