【C#】値型と参照型の違いをわかりやすく解説

C# のデータ型は大きく「値型」と「参照型」に分けられます。この2つはメモリ上での扱い方が異なり、プログラムの挙動に大きな影響を与えます。特に変数の代入やメソッド呼び出しの際に違いが出るため、しっかり理解しておくことが重要です。本記事では値型と参照型の違いをわかりやすく解説します。

値型とは?

値型は変数そのものがデータを保持します。代入するときはデータがコピーされるため、他の変数に影響を与えません。C# の組み込み型の多く(intdoubleboolstruct など)が値型です。

int a = 10;
int b = a;  // 値がコピーされる

b = 20;
Console.WriteLine(a); // 10(aは影響を受けない)
Console.WriteLine(b); // 20

このように値型では変数ごとに独立した値を持ちます。

参照型とは?

参照型は変数がデータそのものではなく「データの参照先(アドレス)」を保持します。代入するときは参照先がコピーされるため、同じオブジェクトを指すことになります。class で定義された型や stringarray などが参照型です。

class Person
{
    public string Name { get; set; }
}

Person p1 = new Person { Name = "Taro" };
Person p2 = p1; // 参照がコピーされる(同じオブジェクトを指す)

p2.Name = "Hanako";
Console.WriteLine(p1.Name); // Hanako(p1も影響を受ける)

参照型では複数の変数が同じオブジェクトを共有するため、1つを変更すると他の変数からも変更が反映されます。

値型と参照型の違いまとめ

特徴 値型 参照型
データの保持方法 変数が値そのものを保持 変数は参照先(アドレス)を保持
代入時の挙動 値のコピーが作られる 同じオブジェクトを指す
主な型 int, double, bool, struct class, string, array, object
影響範囲 変数ごとに独立 複数の変数で共有される

使い分けのポイント

  • 値型 … 小さなデータでコピーしても負担が少ない場合や、独立した値を持たせたい場合
  • 参照型 … 複雑なデータを扱い、複数の場所で共有したい場合

まとめ

C# における値型と参照型の違いは「値そのものを持つか」「参照を持つか」にあります。代入やメソッド引数の挙動が変わるため、適切に使い分けることが重要です。値型はシンプルで独立したデータに、参照型は共有や複雑なオブジェクト管理に向いています。