C# のデータ型は大きく「値型」と「参照型」に分けられます。この2つはメモリ上での扱い方が異なり、プログラムの挙動に大きな影響を与えます。特に変数の代入やメソッド呼び出しの際に違いが出るため、しっかり理解しておくことが重要です。本記事では値型と参照型の違いをわかりやすく解説します。
値型とは?
値型は変数そのものがデータを保持します。代入するときはデータがコピーされるため、他の変数に影響を与えません。C# の組み込み型の多く(int
、double
、bool
、struct
など)が値型です。
int a = 10;
int b = a; // 値がコピーされる
b = 20;
Console.WriteLine(a); // 10(aは影響を受けない)
Console.WriteLine(b); // 20
このように値型では変数ごとに独立した値を持ちます。
参照型とは?
参照型は変数がデータそのものではなく「データの参照先(アドレス)」を保持します。代入するときは参照先がコピーされるため、同じオブジェクトを指すことになります。class
で定義された型や string
、array
などが参照型です。
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# における値型と参照型の違いは「値そのものを持つか」「参照を持つか」にあります。代入やメソッド引数の挙動が変わるため、適切に使い分けることが重要です。値型はシンプルで独立したデータに、参照型は共有や複雑なオブジェクト管理に向いています。