2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C# 入門】レコード型って何?基礎から理解するシンプルで安全なデータ型

Last updated at Posted at 2025-01-02

はじめに

C#でプログラムを書いていると、データを扱うクラスをたくさん作ることになりますよね。

例えば、ユーザー情報を扱うクラスを作るとき、こんなコードを書いたことはありませんか?

C#
public class User
{
    public string Name { get; set; }
    public string Email { get; set; }
}

C# 9.0で導入された「レコード型」を使うと、もっと便利にデータを扱えるようになります。

この記事では、レコード型の基本を初心者向けにわかりやすく整理しました!

目次

レコード型とは?

データを安全に扱うための新しい型

レコード型は、データを安全に扱うために設計された新しい型です。
通常のクラスと似ていますが、データの変更を防ぐ(イミュータブル=変更不可)という特徴があります。

なぜレコード型が必要なの?

例えば、以下のようなコードを見てみましょう。

C#
// 通常のクラスの場合
public class UserClass
{
    public string Name { get; set; }
    public string Email { get; set; }
}

var user = new UserClass { Name = "田中太郎", Email = "tanaka@example.com" };
user.Name = "鈴木一郎";  // 後からデータを変更できてしまう

このコードの問題点は

  • データが自由に変更できてしまう
  • バグの原因になりやすい
  • 複数の場所でデータが変更される可能性がある

レコード型を使うと、このような問題を防ぐことができます!

レコード型の基本的な使い方

基本的な書き方

レコード型は、とてもシンプルに書けます。

C#
// レコード型の基本的な書き方
public record User(string Name, string Email);

// 使い方
var user = new User("田中太郎", "tanaka@example.com");

たったこれだけで

  • データを格納するプロパティ
  • コンストラクタ
  • データを文字列で表示する機能
    が自動的に作られます!

データの更新方法

レコード型では、withというキーワードを使ってデータを更新します。

C#
var user1 = new User("田中太郎", "tanaka@example.com");
var user2 = user1 with { Name = "鈴木一郎" };  // 新しいデータを作成

Console.WriteLine(user1);  // User { Name = 田中太郎, Email = tanaka@example.com }
Console.WriteLine(user2);  // User { Name = 鈴木一郎, Email = tanaka@example.com }

ポイント

  • 元のデータ(user1)は変更されません
  • 新しいデータ(user2)が作られます
  • 安全にデータを扱えます!

レコード型のメリット

1. コードが短く書ける

通常のクラスだと、同じ機能を実現するのにたくさんのコードが必要です。

C#
// 通常のクラスの場合(同じ機能を実現するコード)
public class UserClass
{
    public string Name { get; }
    public string Email { get; }

    public UserClass(string name, string email)
    {
        Name = name;
        Email = email;
    }
}

// レコード型の場合
public record User(string Name, string Email);  // たったこれだけ!

2. データの比較が簡単

レコード型は、データの中身を簡単に比較できます。

C#
var user1 = new User("田中太郎", "tanaka@example.com");
var user2 = new User("田中太郎", "tanaka@example.com");

Console.WriteLine(user1 == user2);  // True - 中身が同じなのでtrue

3. バグが起きにくい

データが勝手に変更されないので、思わぬバグを防げます。

実践的な例

ユーザー情報を管理する例

C#
public record User(string Name, string Email);
public record AdminUser(string Name, string Email, string Role) : User(Name, Email);

// 使用例
var user = new User("田中太郎", "tanaka@example.com");
var admin = new AdminUser("管理者太郎", "admin@example.com", "システム管理者");

// メールアドレスを更新する場合
var updatedUser = user with { Email = "new.tanaka@example.com" };

商品データを管理する例

C#
public record Product(
    string Name,
    int Price,
    string Description
);

// 使用例
var product = new Product("スマートフォン", 50000, "最新モデル");
var discountProduct = product with { Price = 45000 };  // セール価格の商品を作成

よくある疑問

Q1: 既存のクラスは全部レコード型に書き換えるべき?

A1: いいえ、以下の場合はクラスを使うのがおすすめです。

  • データを頻繁に更新する必要がある場合
  • メソッドをたくさん持つ場合
  • 複雑な処理を行う場合

Q2: レコード型のデータは一切変更できないの?

A2: initを使うと、作成時のみ値を設定できます。

C#
public record User
{
    public string Name { get; init; }
    public string Email { get; init; }
}

// 作成時は設定できる
var user = new User { Name = "田中太郎", Email = "tanakatt@123xxx.com" };

// 作成後は変更できない(コンパイルエラー)
// user.Name = "鈴木一郎";  

Q3: パフォーマンスは大丈夫?

A3: 通常のクラスと比べても、ほとんど違いはありません。
むしろ、データの変更を防げるので、バグの防止につながります。

まとめ

  • レコード型は、データを安全に扱うための新しい機能
  • 簡単に書けて、データの変更を防げる
  • 特にデータを保持するだけの用途に最適

これからC#でプログラミングを始める方は、ぜひレコード型を使ってみてください!安全で書きやすいコードが作れるようになりますよ。

参考資料

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?