这个reflection代码出了什么问题? GetFields()返回一个空数组

C#,Net 2.0

这是代码(我拿出了所有特定于域的东西,它仍然返回一个空数组):

using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ChildClass cc = new ChildClass(); cc.OtherProperty = 1; FieldInfo[] fi = cc.GetType().GetFields(); Console.WriteLine(fi.Length); Console.ReadLine(); } } class BaseClass { private int myVar; public int MyProperty { get { return myVar; } set { myVar = value; } } } class ChildClass : BaseClass { private int myVar; public int OtherProperty { get { return myVar; } set { myVar = value; } } } } 

无参数GetFields()返回公共字段。 如果您想要非公开的,请使用:

 cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic); 

或者你想要的任何合适的组合 – 但你确实需要指定InstanceStatic中的至少一个,否则它也找不到。 您既可以指定两个,也可以指定公共字段,以获取所有内容:

 cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); 

由于该字段是私有的,因此您需要使用允许您指定BindingFlags.NonPublic的GetFields()重载。

要使其工作,请将其更改为:

 FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance); 

您需要指定您想要私有(NonPublic)字段

改成:

 FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);