【发布时间】:2012-08-13 00:48:10
【问题描述】:
我有一段非常简单的代码
var propertyBuilder =
typeBuilder.DefineProperty(upperName, PropertyAttributes.None, propertyType, new[] { propertyType });
propertyBuilder.SetConstant(Convert.ChangeType(propertyInfo.Default, propertyType));
之后,当我调用CreateType() 方法并创建类的实例时,我试图检查分配了默认值的属性的值,但我看不到任何更改。
创建类的实例后,我无法使用SetValue 方法,因为所有构造的类型都存储在元数据字典中,并且可以从代码中的不同位置使用。
有什么建议为什么SetConstant 方法不起作用?
【问题讨论】:
-
我不明白你为什么不能使用
SetValue()。SetValue()仅影响该类型的一个实例,它不会影响“代码中的不同位置”(除非它们共享该类型的相同实例)。 -
另外,您真的要创建索引器(即带参数的属性)而不是普通属性吗?因为这就是设置
parameterTypes所做的。 -
我需要影响该类型的所有实例,这就是为什么我想在构建类型时使用 SetConstant 方法
-
我把最后一个参数改成了null,但还是一样
标签: c# .net reflection properties reflection.emit