値型と参照型の相違は何か? 前回のおさらいも兼ねて、話のまくらに匿名メソッドが変数をキャプチャすることの問題を考えてみよう。 その前に、1つクイズを出そう。 C#(あるいは.NET Framework)に存在する型は、主に値型と参照型に分類できる。例えば、int型は値型だが、string型は参照型である。自分で型を定義する場合は、structキーワードを使うと値型になり、classキーワードを使うと参照型になる。 では、値型と参照型はいったい何が違っているのだろうか? 答えを見る前に少し考えてみよう。 ……。 最も基本的な相違は、値型は「値」そのものを受け渡すのに対して、参照型は「参照」を受け渡す点だろう。例えば、メソッドの引数にint型の値を渡すと値の複製が作られてメソッドに渡される(refやoutを付けると参照で渡すこともできるが基本は値)。一方、string型の値を渡すと、値の複製を