C#为什么使用反射获取字段对象,第一个字段来自子对象,然后来自基类
每个对象首先存储基类属性,然后存储子类属性。但当我尝试使用reflection GetFields方法获取对象属性时,我得到了以下结果:C#为什么使用反射获取字段对象,第一个字段来自子对象,然后来自基类,c#,reflection,C#,Reflection,每个对象首先存储基类属性,然后存储子类属性。但当我尝试使用reflection GetFields方法获取对象属性时,我得到了以下结果: Int32 j Int32 i 当我期待的时候 Int32 i Int32 j 代码示例 using System; using System.Reflection; namespace MyProgram { class Program { static void Main() {
Int32 j
Int32 i
当我期待的时候
Int32 i
Int32 j
代码示例
using System;
using System.Reflection;
namespace MyProgram
{
class Program
{
static void Main()
{
Type t = typeof(B);
FieldInfo[] fields = t.GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (FieldInfo fi in fields)
{
Console.WriteLine(fi);
}
Console.ReadKey();
}
}
class A
{
public int i = 1;
}
class B : A
{
public int j = 2;
}
}
问:你知道为什么GetFields以不同的顺序返回属性吗(这与它们的存储顺序不同)?为什么这很重要?您的逻辑无论如何都不应该依赖于返回字段的顺序,因为它是: GetFields方法不按特定顺序返回字段, 如字母顺序或声明顺序。您的代码不能依赖于 返回字段的顺序,因为顺序不同
如果要处理
B
的字段,而不关心基类A
的字段,请使用:
指定仅在提供的
应考虑类型的层次结构。继承的成员不是
考虑过
你的问题是什么?这段代码的输出是什么?它与您期望/想要的有什么不同?很久以前,当我还是一名初级软件开发人员时,我就提出了这个问题,现在我意识到顺序确实不符合要求,我的逻辑不应该依赖于此。