什么是错的这种反射代码?GetFields()是返回的一个空阵列
-
22-07-2019 - |
题
C#网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<T>
{
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
}
class ChildClass : BaseClass<ChildClass>
{
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);
其他提示
由于该领域是私有的,需要使用载的GetFields()允许指定 BindingFlags.非公开.
使这项工作,将其更改为:
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
您需要指定所需的专用(非公开)领域
更改为:
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
不隶属于 StackOverflow