0

我对 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);
    }
4

3 回答 3

1

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

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

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

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

于 2013-10-22T23:20:30.727 回答
1

您需要将“计数”作为实例变量...

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”声明为局部变量,因此在方法的每个条目上都对其进行了初始化,因此该值不是持久的。在这种情况下不需要引用参数,因此它们已被删除。

于 2013-10-22T23:24:25.770 回答
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()它的作用,而无需实际研究该代码。

于 2013-10-22T23:50:28.497 回答