【发布时间】:2016-08-09 20:11:45
【问题描述】:
如果我要更改 bool.TrueString 的值,我会使用反射:
typeof(bool).GetField("TrueString", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Yes");
Console.WriteLine(bool.TrueString); // Outputs "Yes"
但是,我无法更改 Type.Delimiter 的值:
typeof(Type).GetField("Delimiter", BindingFlags.Public | BindingFlags.Static).SetValue(null, '-');
Console.WriteLine(Type.Delimiter); // Outputs "."
这是为什么?
【问题讨论】:
-
不确定,反正这似乎是个可怕的主意。
-
查看源代码,这两个字段的声明几乎相同但不完全相同,一个是只读的 = ".",另一个是只读的 = 另一个只读字面量。
-
一个疯狂的猜测。由于 bool 是
struct而Type是抽象类,反射可能会对该结构执行一些黑魔法。正如我所说..只是一个猜测 -
这个问题应该叫做“为什么我不能使用反射更改静态只读字段”。这与具体的类无关。
-
@usr 但是我正在更改
bool.TrueString,所以这并不完全正确
标签: c# .net reflection