【C#】refキーワードで参照型を参照渡しした時の挙動に関して
class RefTest
{
public void MainMethod()
{
RefTestClass a = new RefTestClass();
a.VAL = "test";
test(ref a);
Console.WriteLine(a.VAL); // vvalvalnew が返ってくる。
test2(a);
Console.WriteLine(a.VAL); // valval2 が返ってくる。
}
/// <summary>
/// ref付き参照型渡し
/// 参照する場所を変更できる。
/// </summary>
/// <param name="val"></param>
private static void test(ref RefTestClass val)
{
val.VAL = "valval"; // コール元メソッドから見て、この処理は有効
val = new RefTestClass(); // 参照する場所を変更した、と同等の処理
val.VAL = "valvalnew"; // コール元メソッドから見て、この処理は有効!
}
/// <summary>
/// ref無し参照型渡し
/// 参照する場所を変更できない。
/// </summary>
/// <param name="val"></param>
private static void test2(RefTestClass val)
{
val.VAL = "valval2"; // コール元メソッドから見て、この処理は有効
val = new RefTestClass(); // newはしたが、このメソッド内だけのスコープ(返らない)
val.VAL = "valval2new"; // コール元メソッドから見て、この処理は無効
}
}
public class RefTestClass
{
public string VAL { get; set; }
}