Java到C#转换查找具有反射的子类的公共字段
我目前正在将一个框架的一部分从java移植到C 我在Java中使用了下面的一行代码,按照我的抽象类的子类声明的顺序来获取声明的字段。然后,我将使用此字段列表通过反射设置值Java到C#转换查找具有反射的子类的公共字段,java,c#,reflection,Java,C#,Reflection,我目前正在将一个框架的一部分从java移植到C 我在Java中使用了下面的一行代码,按照我的抽象类的子类声明的顺序来获取声明的字段。然后,我将使用此字段列表通过反射设置值 Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields(); 我尝试使用以下方法在C#中获得相同的结果。但这也将返回超级类的所有公共字段 IEnumerable<FieldInfo> fields = this.
Field[] fields = this.getClass().asSubclass(this.getClass()).getDeclaredFields();
我尝试使用以下方法在C#中获得相同的结果。但这也将返回超级类的所有公共字段
IEnumerable<FieldInfo> fields = this.GetType().GetFields().OrderBy(field => field.MetadataToken);
IEnumerable fields=this.GetType().GetFields().OrderBy(field=>field.MetadataToken);
是否有某种方法可以在C#中实现与Java方法相同的结果
重复一下,我只需要当前类的任何子类的声明字段。传递
BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly
您只需要使用:
指定只应考虑在所提供类型的层次结构级别声明的成员。不考虑继承的成员
例如,假设您还需要私有字段,以及实例字段和静态字段,请删除不需要的标志:
这只会得到任何子类的字段吗?@LexWebb:这不会返回超类声明的字段。也许我还没有喝足够的咖啡,但是“this.getClass().asSubclass(this.getClass())”与“this.getClass()”有什么不同?哈哈,可能不是。那是我不久前写的。我可能是想确保它只是子类。
var fields = GetType().GetFields(BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.Instance)
.OrderBy(...);