リフレクションを使用して C# のプライベート読み取り専用フィールドを変更できますか? 質問する

リフレクションを使用して C# のプライベート読み取り専用フィールドを変更できますか? 質問する

リフレクションを使用すると多くのことができるので、コンストラクターの実行が完了した後にプライベート読み取り専用フィールドを変更できるかどうか疑問に思っています。
(注: 単なる好奇心です)

public class Foo
{
 private readonly int bar;

 public Foo(int num)
 {
  bar = num;
 }

 public int GetBar()
 {
  return bar;
 }
}

Foo foo = new Foo(123);
Console.WriteLine(foo.GetBar()); // display 123
// reflection code here...
Console.WriteLine(foo.GetBar()); // display 456

ベストアンサー1

あなたはできる:

typeof(Foo)
   .GetField("bar",BindingFlags.Instance|BindingFlags.NonPublic)
   .SetValue(foo,567);

おすすめ記事