Я не уверен, чего именно вы хотите достичь, но его работы для меня:
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
, для этого я добавил конструктор к вашему DerivedClass2
, который делает именно это:
class DerivedClass2 : BaseClass
{
GenericClass<DerivedClass1> subItem;
public DerivedClass2()
{
subItem = new GenericClass<DerivedClass1>();
}
}
Edit:
Чтобы узнать тип result
во время выполнения, вы можете сделать следующее:
var foo = new DerivedClass2();
var result = typeof(DerivedClass2).GetField("subItem",
BindingFlags.NonPublic |
BindingFlags.Instance)
.GetValue(foo);
Type myType = result.GetType().GetGenericArguments()[0];
В примере это вернет тип DerivedClass1
. Также я думаю, что эта статья msdn может быть актуальной.