Architect's Log

I'm a Cloud Architect. I'm highly motivated to reduce toils with driving DevOps.

【.NET Compiler Platform】Primary constructorsでImmutableなクラスを記述する

Primary constructorsで、Immutableなクラスを記述してみます。

Immutableとは

Wikipediaから引用します。
イミュータブル - Wikipedia
オブジェクト指向プログラミングにおいて、イミュータブル(immutable)なオブジェクトとは、作成後にその状態を変えることのできないオブジェクトのことである。 ...

代表的なクラスとして、System.Stringクラスがあります。

Primary constructorsを使ったソースコード

Immutableなクラスを簡潔に記述できるようになりました。

using System;

namespace PrimaryConstructor1 {
    class Program {
        static void Main(string[] args) {
            Parson p = new Parson("Taro", "Sato");

            // p.FirstName = "Jiro" // Property or indexer 'PrimaryConstructor1.Parson.FirstName' cannot be assigned to -- it is read only

            Console.WriteLine("{0} {1}", p.FirstName, p.LastName);  // "Taro Sato"が出力される
            Console.ReadKey();
        }
    }

    /// <summary>
    /// Immutableなクラス
    /// </summary>
    class Parson(string firstName, string lastName) {
        public string FirstName { get; } = firstName;
        public string LastName { get; } = lastName;
    }
}

従来のソースコード

using System;

namespace PrimaryConstructor1 {
    class Program2 {
        static void Main(string[] args) {
            Parson p = new Parson("Taro", "Sato");

            // p.FirstName = "Jiro" // The property or indexer 'PrimaryConstructor1.Parson.FirstName' cannot be used in this context because the set accessor is inaccessible

            Console.WriteLine("{0} {1}", p.FirstName, p.LastName);  // "Taro Sato"が出力される
            Console.ReadKey();
        }
    }

    /// <summary>
    /// Immutableなクラス
    /// </summary>
    class Parson {
        public string FirstName { get; private set; }
        public string LastName { get; private set; }

        public Parson(string firstName, string lastName) {
            this.FirstName = firstName;
            this.LastName = lastName;
        }
    }
}

関連エントリー

【.NET Compiler Platformの新機能】Primary constructors - プログラマーな日々
その際に使った.NET Compiler Platformの新機能を解説します。今回はPrimary constructorsです。 ...