如果我写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;
}
如果我写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;
}
这个问题很难解读。我认为您已经尝试了您命名的函数的两个不同版本Count
,如下所示。
考虑这个版本的函数:
public int Count1(int a)
{
a = 115;
return a;
}
无论您作为参数传递什么值,它都会返回 115。您正在使用 assignment 覆盖参数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
}
这些版本与您的版本完全相同,但我希望您会发现它们更容易理解。
a = 115 将整数变量设置为 115,a += 115 或 a = a + 115 会将 115 添加到 a 的值,然后返回该值的结果
如果您传递100
给具有 a = 100 + 115 语句的函数,a = a + 115
那么它应该返回 215
public int Count(int a)
{
a = a + 115; // a = 100 + 115
return a;
}
当您这样做时a=115
,它会显示,115
因为您正在分配115
给a
。当您使用 时=
,您将右值分配给左值。当你这样做时,你所做的和你做的差不多int c=100
。你指定c
为100
.
当你传入c
, c
is 100
,而你的公式是a=a+115
, 那么a
将会是215
. 当你像你正在做的那样传递一个值时,a
将是100
. 所以,当你做你的公式时a=a+115
,你说的是a=100+115
,你会得到215
。
是否因为您认为“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 显示为字符串。
这有帮助吗?
以下是您的代码的三个版本,用于演示正在发生的事情,以及我认为您真正要问的内容:
原来的:
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
对另一个变量的引用来分配新值。通常,参数是“按值”,其中传入变量值的副本。
请注意,在这种情况下,首选第二个版本。引用参数只应在真正需要时使用,而不是作为简单返回值的替代品。
您的Count()
方法只是丢弃它传递的值并返回115
。如果您替换a=115
为a=a+115
并通过它100
,它将返回 215。这一切都符合预期。
a=a+115
意思是“取 的值a
,加上 115,然后将总数分配给a
。”
这一切都按预期工作。
看起来您想知道变量如何a
转换为您的消息框。这是因为变量a
在您的count()
函数中。更改其值会更改 count 函数的结果。并且由于您的消息框从 获取其值count
,因此您拥有它。