方法中的C#参数值

时间:2012-12-03 16:26:32

标签: c#

如果我写a = a +115我的MessageBox将返回215,但如果写为a=115;则会显示115。

为什么?

private void button1_Click(object sender, EventArgs e)
{
    int c=100;
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    a=115;
    return a;
}

8 个答案:

答案 0 :(得分:4)

这个问题很难破译。我认为你已经尝试了两个不同版本的函数,你命名为Count,如下所示。

考虑这个版本的功能:

public int Count1(int a)
{
    a = 115;
    return a;
}

无论您传递什么值作为参数,它都会返回115。您正在使用作业a = 115覆盖参数。因此,该参数完全没有意义。

现在是另一个版本:

public int Count2(int a)
{
    a = a + 115;
    return a;
}

此版本的函数在变量a中接收参数。然后它将115添加到该值,并返回结果。所以当你这样称呼它时:

Count2(100)

返回的值是215。

如果您编写如下函数,可能会更容易理解:

public int Count1(int a)
{
    return 115; //very clearly the input parameter is ignored
}

public int Count2(int a)
{
    return a + 115; //but in this version, the input parameter is used
}

这些版本与您的版本完全相同,但我希望您会发现它们更容易理解。

答案 1 :(得分:1)

a = 115将整数变量设置为115,a + = 115或a = a + 115将为a的值加115,然后返回该值的结果

答案 2 :(得分:1)

如果你将100传递给声明a = a + 115 a = 100 + 115的函数,那么它应该返回215

public int Count(int a)
{
    a = a + 115; // a = 100 + 115 
    return a;
}

答案 3 :(得分:1)

当您执行a=115时,会显示115,因为您将115分配给a。当您使用=时,您将正确的值分配给左侧值。当你做int c=100时,你正在做的事情大致相同。您将c指定为100

当您传递c时,c100,而您的公式为a=a+115,则a将为215。传递类似于您正在执行的值时,a将为100。因此,当您执行a=a+115的公式时,您说的是a=100+115,而您将获得215

答案 4 :(得分:1)

是否因为您认为“a”和“c”是单独的值而产生混淆?

  

方法Count(int a)并不关心值的名称   最初是“c”。一旦它进入该方法,它将被引用   仅作为“a。”

public int Count(int a)
{
    a = a+115;
    return a;
}

所以一步一步:

  

1)将值100传递给Count()方法。 (a = 100)

     

2)Count()将a的值设置为100 + 115.(a = 215)

     

3)215返回到你的调用方法。

     

4)您的调用方法将215显示为字符串。

这有帮助吗?

答案 5 :(得分:1)

以下是您的代码的三个版本,用于演示正在发生的事情,以及我认为您真正要问的内容:

原件:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Print the result of Count, which (see below) is ALWAYS 115.
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    // Set a to 115 (there is no add here, I think this is a typo)
    a=115;
    // Return a, which is ALWAYS 115.
    return a;
}

我认为你的意思是:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Print the result of Count, which will be 215.
    MessageBox.Show(Count(c).ToString());
}

public int Count(int a)
{
    // Add 115 to a.
    a+=115;

    // Return the result (if a == 100, this will return 215)
    return a;
}

我认为你得到的是:

private void button1_Click(object sender, EventArgs e)
{
    // Set c to 100
    int c=100;

    // Call the count function, passing in a reference for c.
    Count(ref c);

    // Print the value of c. This will be 215 because the Count function set c to a new value.
    MessageBox.Show(c.ToString());
}

public void Count(ref int a)
{
    a+=115;
}

在最后一种情况下,我将功能更改为public void Count(ref int a)ref修饰符允许函数使用对另一个变量的引用来分配新值。通常,参数是“按值”,其中传递变量值的副本。

请注意,在这种情况下,第二个版本是首选。引用参数只应在真正需要时使用,而不是替换简单的返回值。

答案 6 :(得分:0)

您的Count()方法只会丢弃它传递的值并返回115。如果您将a=115替换为a=a+115,并将其传递给100,则会返回215.这完全符合预期。

a=a+115表示“获取a的值,向其添加115,并将总数分配给a。”

这一切都按预期工作。

答案 7 :(得分:-1)

看起来您想知道变量a如何转换为您的消息框。这是因为变量a位于count()函数中。更改其值会更改计数功能的结果。由于您的消息框从count获取其值,因此您可以使用它。