かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

CLIMutable属性つけると便利らしい?

F#にCLIMutableなる属性が追加さられたみたいです。こいつをつけるとデフォルトコンストラクタとか、プロパティに自動的にgetter/setterつけてくれてDTO作ったりEFで便利かもね!みたいな説明が書いてあるような気がしました。

namespace Hoge
    open System;

    // この属性をつけるとレコードにデフォルトコンストラクタとgetter/setterが出来るらしい
    [<CLIMutableAttribute>]
    type Person = {
        Name: string;
        Age: int;
    }

C#のプロジェクトから参照するとデフォルトコンストラクタとプロパティへのセッターが使えました

var p = new Hoge.Person(); // OK
p.Name = "tanaka"; // OK!

ちなみに、属性を外して実行すると上記コードはエラーになります。

var p = new Hoge.Person("tanaka", 10); // コンストラクタで値を設定したら変更できない
p.Name = "kimura"; // NG