Search code examples
c#reflectionfieldreadonly

Can I change a private readonly field in C# using reflection?


I am wondering, since a lot of things can be done using reflection, can I change a private readonly field after the constructor completed its execution?
(note: just curiosity)

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

Solution

  • You can:

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