関数のパラメータの挙動を理解する C#では関数のパラメータとしてobjectはそのコピーを渡されます。つまり渡されたobjectは基本的に元のままで返されます。
C++の値渡しと一緒です。参照渡しではありません。
ここでは、二つのサンプルSwapとModifyを紹介します。
Swapは2つのObjectの中身を入れ替えようとする関数、ModifyはObjectの中身を変更しようとする関数です。
どちらも期待通りには動作しません。
パラメータとして渡されたObjectは関数の処理終了後も元のままです。
どうしてもこのような関数を作りたいときには、キーワードrefを使用します。
しかし、実際には関数ではなく、classを作成しclassの関数もしくはパラメータを通じて同じような動作を実装するのが良いでしょう。
// Swap; attempt to swap two object
private void swap(object a, object b)
{
object temp = a;
a = b;
b = temp;
}
// Test Swap function...
private void buttonSwap_Click(object sender, System.EventArgs e)
{
string a = "a";
string b = "b";
swap (a, b);
Console.WriteLine("a: {0}", a);
Console.WriteLine("b: {0}", b);
}
// Swap Result
// a: a
// b: b
// Swap failed!!
// Modify
private void modify(string a)
{
a = "modified";
}
// Try to modify...
private void button_Click(object sender, System.EventArgs e)
{
string a = "a";
modify(a);
Console.WriteLine(a);
}
// Modify Result
// a
// not modified!!
目次に戻る
| Copyright(c) 2008 WoodenSoldier Software |
|