privateなフィールドにアクセス

privateで定義されているフィールドに対して、読み書きしたい場合にはInvokeMemberを使用します。


class Test
{
  private string str;
}

Test test = new Test();

// set
test.GetType().InvokeMember("str", 
  BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance, 
  null, test, new Object[] { "test" });

// get
Object ob = test.GetType().InvokeMember("str",
  BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, 
  null, test, null);

Console.WriteLine(ob);

出力:test もちろん、テストコードでしか使用しないでしょう。

0 件のコメント :

コメントを投稿