かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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