2010年3月21日日曜日

値型と参照型

EffectiveC#を読んで、基本に立ち返ってみた。

(参照渡)

class Program
{
static void Main(string[] args)
{
var val = new Class();
var val2 = val; //参照渡し

val.MyProperty = 100;

//100 が表示される
Console.WriteLine(val2.MyProperty);
}
}

class Class
{
public int MyProperty { get; set; }
}

classは参照型であり、代入は参照がコピーされる。なので、 valとVal2の指す実体は同じ。 
image

(値渡)

class Program
{
static void Main(string[] args)
{
var val = new Struct();
var val2 = val; //値渡し

val.MyProperty = 100;

//0 が表示される
Console.WriteLine(val2.MyProperty);

}
}

struct Struct
{
public int MyProperty { get; set; }
}

structは値型であり、代入はコピーが作成されるので、valを変更してもval2に影響はない。
image

0 件のコメント: