スポンサーリンク

C# の record 型とは?class との違いと使い所

C# 9.0 で導入された record 型は、不変オブジェクトや値の比較を簡潔に扱えるようにする新しい参照型です。従来の class と似ているようで異なる性質を持ちます。本記事では recordclass の違いや使いどころについて解説します。

record 型とは?

record は参照型ですが、主に値ベースでの比較イミュータブル(不変)データ構造を意識した設計になっています。

基本構文

public record Person(string FirstName, string LastName);

これは以下のような機能を自動的に持つクラスと同等です:

  • プロパティの自動定義
  • コンストラクタの生成
  • Equals()GetHashCode() のオーバーライド
  • ToString() の実装

class との違い

比較方法の違い

  • class は参照の等価性(==)で比較される
  • record値の等価性で比較される(すべてのプロパティの値が同じか)
var p1 = new Person("Taro", "Yamada");
var p2 = new Person("Taro", "Yamada");
Console.WriteLine(p1 == p2); // record: true, class: false

不変性(イミュータブル)

  • recordinit アクセサを用いた不変プロパティ設計に適している
  • with 式による簡易コピーが可能
var p1 = new Person("Taro", "Yamada");
var p2 = p1 with { FirstName = "Jiro" };

継承と階層構造

  • record でも継承は可能ですが、データ主導な使い方が推奨されます

使い所の例

record が向いている場面

  • DTO や API レスポンスなどのデータキャリア
  • イミュータブルなモデル設計
  • LINQ やコレクションの比較対象

class が適している場面

  • 状態を持ち変化するオブジェクト(例:エンティティ)
  • 振る舞い(メソッド)中心の設計
  • パフォーマンスやメモリ最適化が重要な場面

まとめ

record は C# における新しいデータ表現の手段として非常に強力です。特に値の等価性や不変性が重視されるシナリオにおいては、従来の class よりもシンプルかつ安全にコードを書くことができます。

ただし、状態管理やビジネスロジックの中心となるようなオブジェクトには引き続き class を使うべきです。状況に応じて使い分けることで、より明確で堅牢なコード設計が可能になります。

.NET
スポンサーリンク
シェアする
trelab