一尘不染

我可以使用反射更改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

阅读 276

收藏
2020-05-19

共1个答案

一尘不染

您可以:

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