Java到C#的转换,查找带有反射的子类的公共字段
本文关键字:子类 反射的 字段 查找 转换 Java | 更新日期: 2023-09-27 18:25:34
我目前正在将一个框架的一部分从java移植到C#。
我在Java中使用了以下行,按照抽象类的子类的声明顺序来获取已声明的字段。然后我会使用这个字段列表通过反射来设置值。
Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields();
我已经尝试使用以下方法在C#中获得相同的结果。但这也将返回超级类的所有公共字段。
IEnumerable<FieldInfo> fields = this.GetType().GetFields().OrderBy(field => field.MetadataToken);
有没有什么方法可以让我在C#中获得与Java方法相同的结果。
重复一遍,我只需要当前类的任何子类的声明字段。
您只需要使用BindingFlags.DeclaredOnly
:
指定只应考虑在所提供类型的层次结构级别声明的成员。不考虑继承的成员。
例如,假设您也想要私有字段,以及实例和静态字段-删除不想要的标志:
var fields = GetType().GetFields(BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.Instance)
.OrderBy(...);
通过BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly