这个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);
或者你想要的任何合适的组合 – 但你确实需要指定Instance
和Static
中的至少一个,否则它也找不到。 您既可以指定两个,也可以指定公共字段,以获取所有内容:
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);