问题描述
基类:
public class TestBaseClass
{
public virtual int Index { get; }
}
继承的类:
public class TestInheritedClass : TestBaseClass
{
public override int Index => 100; // I want to get this value using reflection
}
我的代码:
static void Main(string[] args)
{
var assemblies = Assembly.LoadFile(args[0]);
foreach(var type in assembly.ExportedTypes)
{
if(type.IsSubclassOf(typeof(TestBaseClass))
{
foreach(var prop in type.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
{
var value = prop.GetValue(typeof(int),null); // I expect to return 100 from override Index value
}
}
}
}
我错过了什么吗?还是我把这一切弄错了?我正在尝试从虚拟属性获取值100
。有没有办法获得价值?
解决方法
有没有办法获得价值?
是的,有办法。 首先让我们看看您在这里做了什么:
prop.GetValue(typeof(int),null)
您正在使用PropertyInfo.GetValue
的{{3}}重载。它期望从中获取值的对象实例作为第一个参数。相反,您正在传递typeof(int)
。这不是TestInheritedClass
的实例。
在这里,我将忽略第二个参数,因为我们不是在谈论索引器。
您可以在文档中了解该参数。
相反,您必须首先创建TestInheritedClass
的实例:
var instance = Activator.CreateInstance(typeof(TestInheritedClass));
然后像这样使用它:
if (type.IsSubclassOf(typeof(TestBaseClass))
{
var instance = Activator.CreateInstance(type);
foreach (var prop in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
{
var value = prop.GetValue(instance);
}
}