a = a +115
myと書く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
myと書く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
以下に示すように、という名前の関数の 2 つの異なるバージョンを試したと思います。
このバージョンの関数を検討してください。
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
}
これらのバージョンはあなたのバージョンとまったく同じですが、理解しやすいと思います。
a = 115 は整数変数を 115 に設定し、a += 115 または a = a + 115 は a の値に 115 を追加し、その値の結果を返します。
「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 を文字列として表示します。
それは役に立ちますか?
何が起こっているのか、そしてあなたが本当に求めていることを示すために、コードの 3 つのバージョンを次に示します。
オリジナル:
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
修飾子により、関数は別の変数への参照を使用して新しい値を割り当てることができます。通常、パラメーターは「値渡し」であり、変数の値のコピーが渡されます。
この場合、2 番目のバージョンが優先されることに注意してください。参照パラメータは、単純な戻り値の代わりとしてではなく、本当に必要な場合にのみ使用してください。
a = 100 + 115 の100
ステートメントを持つ関数に渡すと、215 が返されます。a = a + 115
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
is100
で、式が isa=a+115
の場合、a
be になります215
。あなたがやっているような値を渡すと、 にa
なります100
。したがって、 の式を実行すると、 とa=a+115
言ってa=100+115
、 が得られます215
。
あなたのCount()
メソッドは、渡された値を捨てて を返すだけ115
です。に置き換えa=115
てa=a+115
渡すと100
、215 が返されます。これはすべて予想どおりです。
a=a+115
は、「 の値にa
115 を加え、合計を に代入する」という意味a
です。
これはすべて期待どおりに機能しています。
a
変数がメッセージ ボックスにどのように変換されるのか疑問に思っているようです。これは、変数a
がcount()
関数内にあるためです。その値を変更すると、count 関数の結果が変わります。メッセージ ボックスは から値を取得するのでcount
、これで完了です。