我的班级是;
class BaseClass
{
}
class DerivedClass1 : BaseClass
{
}
class GenericClass<T>
{
}
class DerivedClass2 : BaseClass
{
GenericClass<DerivedClass1> subItem;
}
我想访问DerivedClass2类的所有字段。 我使用System.Reflection和FieldInfo.GetValue()方法;
我无法获得subItem字段。
FieldInfo.GetValue()方法的返回类型是“object”。
我不能投身GenericClass<DerivedClass1>
要么
我不能得到DerivedClass1类型。
我用BaseClass
BaseClass instance = FieldInfo.Getvalue(this) as GenericClass<BaseClass>;
但实例为null。 如何获取类型实例或如何只获取类型?
答案 0 :(得分:2)
我不确定你想要达到什么目的,但他的作品对我而言:
var foo = new DerivedClass2();
var result = typeof(DerivedClass2).GetField("subItem",
BindingFlags.NonPublic |
BindingFlags.Instance)
.GetValue(foo);
var genericClassField = result as GenericClass<DerivedClass1>;
genericClassField
的类型为GenericClass<DerivedClass1>
- 当然,在执行此操作之前,您必须为其指定一个值,否则结果将为null
,为此我向您的{{添加了一个构造函数1}}就是这样:
DerivedClass2
修改强>
要在运行时找出class DerivedClass2 : BaseClass
{
GenericClass<DerivedClass1> subItem;
public DerivedClass2()
{
subItem = new GenericClass<DerivedClass1>();
}
}
的类型,您可以执行以下操作:
result
在示例中,这将返回类型var foo = new DerivedClass2();
var result = typeof(DerivedClass2).GetField("subItem",
BindingFlags.NonPublic |
BindingFlags.Instance)
.GetValue(foo);
Type myType = result.GetType().GetGenericArguments()[0];
。另外我认为msdn article可能是相关的。