Java到C#转换用反射查找子类的公共字段

时间:2014-10-05 20:05:22

标签: java c# reflection

我目前正在将一部分框架移植到来自Java的C#。

我在Java中使用以下行来按照我的抽象类的子类的声明顺序获取声明的字段。然后,我将使用此字段列表通过反射设置值。

Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields();

我尝试使用以下方法在C#中获得相同的结果。但这也将返回超类的所有公共领域。

IEnumerable<FieldInfo> fields = this.GetType().GetFields().OrderBy(field => field.MetadataToken);

我是否可以通过某种方式在C#中获得与Java方法相同的结果。

重复一遍,我只需要我当前类的任何子类的声明字段。

2 个答案:

答案 0 :(得分:6)

您只需使用BindingFlags.DeclaredOnly

  

指定只应考虑在提供的类型层次结构级别声明的成员。不考虑继承的成员。

例如,假设您也想要私有字段,以及实例和静态字段 - 删除您想要的标记:

var fields = GetType().GetFields(BindingFlags.DeclaredOnly | 
                                 BindingFlags.Public |
                                 BindingFlags.NonPublic |
                                 BindingFlags.Static |
                                 BindingFlags.Instance)
                      .OrderBy(...);

答案 1 :(得分:1)

通过BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly