Open ufcpp opened 8 months ago
ブログにでも書く? C# 入門の雑記?
using System.Runtime.CompilerServices; var p = new Private(); GetValue(p) = 99; Console.WriteLine(p); // 99 // アクセス制限無視してメンバーにアクセスする手段を用意したらしい。 // 今まではリフレクション(IL Emit)でやりたい放題やってたけども、 // AOT (リフレクションをソースジェネレーターで置き換えたい)で困るからって。 // // ランタイム側で UnsafeAccessor 属性付きの external メソッドを特別扱い(intrinsic)してる。 [UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_value")] extern static ref int GetValue(Private x); class Private { private int _value; // Make field readonly 出っぱなしにはなる。 public override string ToString() => _value.ToString(); }
基本的には AOT 向け。 シリアライザーで使うのが一番の動機。
単体テストとかにも使えそう。 → すでに neue さんが InternalVisibleTo は広範囲にわたって公開されすぎる感ある。 Visual Studio は昔 internal accessor (中身はリフレクション)とか生成してくれる機能持ってたのに気が付いたら消えてた。
ブログにでも書く? C# 入門の雑記?
基本的には AOT 向け。 シリアライザーで使うのが一番の動機。
単体テストとかにも使えそう。 → すでに neue さんが InternalVisibleTo は広範囲にわたって公開されすぎる感ある。 Visual Studio は昔 internal accessor (中身はリフレクション)とか生成してくれる機能持ってたのに気が付いたら消えてた。