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

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

(我无意更改属性的默认值 - 只是想了解这些东西的作用)

最佳答案

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

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

关于c# - PropertyAttributes.HasDefault 和 PropertyBuilder.SetConstant 的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21837365/

10-12 15:54