2020年11月11日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 396 count

【入門級】C#9の目玉recordを使ってみる

Written By: 川俣 晶連絡先

 C#9の目玉recordを使ってみよう!

 recordは不変のクラスだ。

 一度作成すると値を変更することはできない。

 一般的に不変であることはプログラムの複雑さの爆発を防ぐ良い特徴であるとされている。一部のプログラミング言語は不変を貫徹し、そもそも変数が存在しないものもある。

 C#はそこまで行っていないものの、不変の扱いは強化された。

 たとえば、近所の自販機に缶コーヒーを買いに行くミッションの場合、缶コーヒーの名前と値段は変化してはならない情報だ。しかし、買う本数はリクエスト次第で増減するかもしれない。これは変化する情報だ。

 では、缶コーヒーの名前と値段を格納する形はどう定義すれば良いのか。

 recordを使うとpublic record ProductInfo(string Name, int Price);と書けば良い。

 これはrecordを使った多くの書式の一つだ。

 これで変化できないクラスProductInfoができあがる。

 それでも変化が必要な時はどうするか。

 With式で、メンバーの値を一部入れ換えた新しいオブジェクトを作成するのである。オブジェクトは変化しない。値を一部入れ換えた新しいオブジェクトが生まれるのである。

罠の数々 §

  • C#にrecordが追加されても依然として普通のクラスは定義できることに注意しよう。全部不変にしろとは言っていないのである。recordを使わないという選択肢もある。

参考リンク §

レコードの種類

with expression (C# reference)

 recordの書き方はいろいろある。様々なバリエーションを上記のリンクから確認しておこう。

リポジトリ §

https://github.com/autumn009/cshowto

record §

using System;

// recordの定義

public record ProductInfo(string Name, int Price);

class Program

{

    private static void dump(ProductInfo info)

    {

        Console.WriteLine($"{info.Name}: {info.Price}Yen");

    }

    static void Main()

    {

        // コーヒー120円です

        var info = new ProductInfo("Coffee", 120);

        dump(info);

        // 130円に値上げします

        var info2 = info with { Price = 130 };

        dump(info2);

    }

}

実行結果 (実行する環境で変化する)

Coffee: 120Yen

Coffee: 130Yen

Facebook

COOL C# CREW

キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
12日
【入門級】不変のクラス、一部不変のクラス、可変のクラスを使い分ける
3days 3 count
total 372 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
10日
【入門級】32bit環境か64bit環境か判定する
3days 4 count
total 373 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20201111110456
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.34 (Alpha-Test) Copyright (c) 2004-2018 Pie Dey.Co.,Ltd.