Chr*_*all 23 c# reflection type-parameter
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<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; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 66
无参数GetFields()
返回公共字段.如果您想要非公开的,请使用:
cc.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)
或任何适当的组合你想要的-但你也需要指定的至少一个Instance
和Static
,否则将无法找到任何.您既可以指定两个,也可以指定公共字段,以获取所有内容:
cc.GetType().GetFields(BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.NonPublic |
BindingFlags.Public);
Run Code Online (Sandbox Code Playgroud)
Ree*_*sey 11
由于该字段是私有的,因此您需要使用允许您指定BindingFlags.NonPublic的GetFields()重载.
要使其工作,请将其更改为:
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)
您需要指定您想要私有(NonPublic)字段
改成:
FieldInfo[] fi = cc.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
Run Code Online (Sandbox Code Playgroud)