【发布时间】:2012-08-25 10:17:09
【问题描述】:
刚玩c#的时候,发现了一件奇怪的事情。
代码如下:
class Program
{
static void Main(string[] args)
{
System.Diagnostics.Debug.Write(string.Empty);
typeof(string)
.GetField("Empty", BindingFlags.Static | BindingFlags.Public)
.SetValue(null, "Tolgahan");
Console.WriteLine(string.Empty);
// output : Tolgahan
}
}
为什么反射让我们改变只读字段?
问题是“为什么允许通过反射进行设置”,而不是“如何做”,所以它不是 Can I change a private readonly field in C# using reflection? 的重复。
【问题讨论】:
-
你可以用反射做各种你不能正常做的事情。例如,您可以从其他类获取/设置私有字段。我几乎可以肯定这不是错误。至于它是否可取是另一回事。
-
窃取引用,只读是为了防止“墨菲,而不是马基雅维利”
-
@Dennis:另一个问题只是问它是否可能,这个问题说它是可能的,但问为什么(因此 IMO 比另一个问题更有价值)。
-
@O.R.Mapper:仔细看看 Eric Lippert 的评论。有一个解释。
-
如果剩下的只是“为什么会这样”,除非 .Net 的首席设计师开会并做出统一的回应,否则我不希望有明确的答案。
标签: c# reflection readonly