using System;
class Test
{
int value;
Test(int value) {
this.value = value;
}
static void call_by_value(int x, Test y) {
x = 3; // 呼出し元に影響しない
y.value = 4; // 呼出し元に影響する
y = new Test(5); // 呼出し元に影響しない
}
static void call_by_reference(ref int x, ref Test y) {
x = 6; // 呼出し元に影響する
y.value = 7; // 呼出し元に影響する
y = new Test(8); // 呼出し元に影響する
}
static void Main() {
int value = 1; // intは値型変数
Test test = new Test(2); // オブジェクトは参照型変数
call_by_value(value, test); // 値型変数の値渡し、参照型変数の値渡し
Console.WriteLine("{0} {1}", value, test.value); // 1 4
call_by_reference(ref value, ref test); // 値型変数の参照渡し、参照型変数の参照渡し
Console.WriteLine("{0} {1}", value, test.value); // 6 8
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgVGVzdAp7CiAgICBpbnQgdmFsdWU7CgogICAgVGVzdChpbnQgdmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgICB9CgogICAgc3RhdGljIHZvaWQgY2FsbF9ieV92YWx1ZShpbnQgeCwgVGVzdCB5KSB7CiAgICAgICAgeCA9IDM7ICAgICAgICAgICAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GX44Gq44GECiAgICAgICAgeS52YWx1ZSA9IDQ7ICAgICAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GZ44KLCiAgICAgICAgeSA9IG5ldyBUZXN0KDUpOyAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GX44Gq44GECiAgICB9CgogICAgc3RhdGljIHZvaWQgY2FsbF9ieV9yZWZlcmVuY2UocmVmIGludCB4LCByZWYgVGVzdCB5KSB7CiAgICAgICAgeCA9IDY7ICAgICAgICAgICAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GZ44KLCiAgICAgICAgeS52YWx1ZSA9IDc7ICAgICAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GZ44KLCiAgICAgICAgeSA9IG5ldyBUZXN0KDgpOyAgLy8g5ZG85Ye644GX5YWD44Gr5b2x6Z+/44GZ44KLCiAgICB9CgogICAgc3RhdGljIHZvaWQgTWFpbigpIHsKICAgICAgICBpbnQgdmFsdWUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludOOBr+WApOWei+WkieaVsAogICAgICAgIFRlc3QgdGVzdCA9IG5ldyBUZXN0KDIpOyAgICAgICAgICAgICAgICAgLy8g44Kq44OW44K444Kn44Kv44OI44Gv5Y+C54Wn5Z6L5aSJ5pWwCiAgICAgICAgY2FsbF9ieV92YWx1ZSh2YWx1ZSwgdGVzdCk7ICAgICAgICAgICAgICAvLyDlgKTlnovlpInmlbDjga7lgKTmuKHjgZfjgIHlj4LnhaflnovlpInmlbDjga7lgKTmuKHjgZcKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiezB9IHsxfSIsIHZhbHVlLCB0ZXN0LnZhbHVlKTsgIC8vIDEgNAogICAgICAgIGNhbGxfYnlfcmVmZXJlbmNlKHJlZiB2YWx1ZSwgcmVmIHRlc3QpOyAgLy8g5YCk5Z6L5aSJ5pWw44Gu5Y+C54Wn5rih44GX44CB5Y+C54Wn5Z6L5aSJ5pWw44Gu5Y+C54Wn5rih44GXCiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInswfSB7MX0iLCB2YWx1ZSwgdGVzdC52YWx1ZSk7ICAvLyA2IDgKICAgIH0KfQ==