我可以使用 PrivateObject 类或 Reflection 来访问私有类中的字段吗?
如果我有一个私有类,
Class A
{
public static string foo;
}
我可以使用反射来访问该静态字段吗?当然,假设我无法更改代码...
我遇到的问题是该类是在与我所在的不同的命名空间中定义的。
假设我在 Test 命名空间中,并且我有一个带有 FOO 的 DLL 引用命名空间。
namespace FOO
{
Class A
{
public static string bar;
}
}
我想从命名空间 TEST 访问类 A 中的 bar 字段。
If i have a private class
Class A
{
public static string foo;
}
Can i use reflection to access that static field? Assuming of course i cannot change the code...
The problem i have is that the Class is defined in a different Namespace than i am in.
lets say I am in the Test namespace, and i have a reference to a DLL with the FOO namespace.
namespace FOO
{
Class A
{
public static string bar;
}
}
I want to access the bar field in the class A from namespace TEST.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
是的,你可以。您需要获取
Type
- 如何获取取决于您的应用的确切性质;Assembly.GetType(string)
将是例如,一种选择。之后,您使用Type.GetField
获取FieldInfo
,然后询问该字段的值,使用null
作为目标,因为它是静态的场地。Yes, you can. You'll need to get the
Type
- how you do that will depend on the exact nature of your app;Assembly.GetType(string)
would be one option, for example. After that, you get theFieldInfo
withType.GetField
and then ask the field for its value, usingnull
as the target as it's a static field.最终对我有用的是 Assembly 方法:
What finally worked for me was the Assembly approach:
这是故意冗长的,因此您将逐步了解正在发生的事情。它检查类型 A 中的所有字段并查找名为“foo”的字段。
编辑:它也适用于不同命名空间中的 A 。
this is intentionally verbose so you'll get what is happening step by step. It checks all the fields in type A and looks for one named "foo".
EDIT: it works for A in a different namespace too.
尝试
Try