PropertyAttributes.HasDefault和PropertyBuilder.SetConstant的含义

时间:2014-02-17 19:11:37

标签: c# .net clr cil reflection.emit

我想问一下使用PropertyAttribute.HasDefault方法定义属性的上下文中System.Reflection.Emit.TypeBuilder.DefineProperty枚举值的目的是什么?当一个人应该使用PropertyAttributes.HasDefaultPropertyAttributes.None时,它会改变什么?

据我所知,它与PropertyBuilder的SetConstant方法有关,但它并没有真正改变属性的默认值,因为我能够测试,那么SetConstant究竟做了什么?

(我不打算改变属性的默认值 - 只是想了解这些事情的作用)

1 个答案:

答案 0 :(得分:2)

SetConstantTypeBuilder.SetConstantValue()的包装器,用于将编译时常量与某些IL元数据相关联,最常见的是参数(使用默认值)和const字段。

它对物业的用处似乎相当可疑;它不会影响属性的get访问者实际返回的值。通过SetConstant()设置的默认值似乎只能在元数据中或通过反射进行检查。如果您希望允许某人仅使用反射或IL分析来确定属性返回的默认值,可能会很有用,但由于get访问器不需要实际返回该值,因此应该采用它带着一粒盐。