如果我写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, cis 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,因此您拥有它。