【发布时间】:2013-06-05 14:06:36
【问题描述】:
我最近在使用 C# 时遇到了一个问题,通过使用 reflection 设置私有成员解决了这个问题。
我惊讶地发现设置私有成员/字段并运行私有方法是 C# 中允许和可能的事情。这不是如何做这些事情的问题,它们有据可查,我的问题是:为什么?
如果您将字段/成员/方法设置为私有/内部,为什么 C# 作为一种语言允许在范围之外设置这些字段?我认为这会引发某种异常。如果类希望它们被更改或设置,不会有方法或构造函数吗?
【问题讨论】:
-
一旦你使用反射、手动发送字节码等,你会说'填充普通的面向对象模型,我需要这样做,我现在需要它'。这意味着取消了正常的限制,因为您明确表示您想要绕过它们。权力越大,责任越大。
-
只是为了迂腐,C# 语言不允许这样做。 System.Reflection 命名空间中的类不是 C# 特定的。
-
如果调试器无法访问您正在调试的类的私有成员,它们将不会很有用。
-
顺便说一句,考虑一下这个小 sn-p 的乐趣:typeof(String).GetField("Empty", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField)。 SetValue(null, "foo");
标签: c# .net reflection