我可以使用反射更改 C# 中的私有只读继承字段吗?
就像在java中一样,我有:
Class.getSuperClass().getDeclaredFields()
如何从超类中知道并设置私有字段?
我知道强烈不建议这样做,但我正在测试我的应用程序,我需要模拟 id 正确但名称不正确的错误情况。但这个ID是私有的。
like in java I have:
Class.getSuperClass().getDeclaredFields()
how I can know and set private field from a superclass?
I know this is strongly not recommended, but I am testing my application and I need simulate a wrong situation where the id is correct and the name not. But this Id is private.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更新后,可以使用反射来设置只读字段的值
是的,在构造函数运行EDIT
以查看直接父类型。如果类型是通用的,此解决方案可能会出现问题。
Yes, it is possible to use reflection to set the value of a readonly field after the constructor has run
EDIT
Updated to look in the direct parent type. This solution will likely have issues if the types are generic.
是的,你可以。
对于字段,请使用
FieldInfo
类。BindingFlags.NonPublic
参数允许您查看私有字段。和一个小测试来证明它有效:
Yes, you can.
For fields, use the
FieldInfo
class. TheBindingFlags.NonPublic
parameter allows you to see private fields.and a small test to prove it works:
这个类可以让你做到这一点:
http://csharptest.net/browse/src/Library/Reflection/PropertyType.cs
用法:
顺便说一句,它将适用于公共/非公共领域或属性。为了便于使用,您可以使用派生类 PropertyValue ,如下所示:
This class will let you do it:
http://csharptest.net/browse/src/Library/Reflection/PropertyType.cs
Usage:
BTW, It will work on public/non-public fields or properties. For ease of use you can use the derived class PropertyValue like this:
正如 JaredPar 所建议的,我做了以下事情:
感谢所有人。
Like JaredPar suggests, I did the follow:
Thanks to all.