【发布时间】:2015-10-28 06:04:59
【问题描述】:
我一直在尝试使用反射进行实验,但我有一个问题。
假设我有一个类,在这个类中我有一个使用 c# 6.0 的新特性初始化的属性
Class MyClass()
{
public string SomeProperty{ get; set; } = "SomeValue";
}
有没有什么方法可以在不初始化类的情况下通过反射获得这个值?
我知道我能做到;
var foo= new MyClass();
var value = foo.GetType().GetProperty("SomeProperty").GetValue(foo);
但我想做的是与此类似的事情;
typeof(MyClass).GetProperty("SomeProperty").GetValue();
我知道我可以使用字段来获取值。但它必须是一个财产。
谢谢。
【问题讨论】:
-
AFAIK 除非类被实例化并分配内存并且其字段已初始化,否则您无法获取该值。作为对这一点的交叉检查,迄今为止已知的大多数反射方法都有一个实例/对象作为参数。
-
我认为这是不可能的,因为属性和类不是静态的。要访问该属性,您必须有一个可用的有效对象(在内存中有引用)。
-
作为回复状态,除非类对象被初始化,否则内存中没有字符串对象存储分配给它的值。您将需要创建一个实例来获取字符串对象和分配给它的值。
-
你可以通过 IL 解析而不是反射获得
SomeValue。搜索MethodBase.GetMethodBody了解更多信息。这不是一件容易的事,但使用适当的工具/库,它仍然可以实现。
标签: c# .net reflection c#-6.0