2014-02-17 2 views
1

Я хотел бы спросить, какова цель PropertyAttribute.HasDefault значение перечисления в контексте определения свойства с использованием метода System.Reflection.Emit.TypeBuilder.DefineProperty? Когда нужно использовать PropertyAttributes.HasDefault и когда PropertyAttributes.None и что он изменит?Значение свойстваAttributes.HasDefault и PropertyBuilder.SetConstant

Насколько я могу видеть, он связан с методом SetConstant PropertyBuilder, но на самом деле он не меняет значение свойства по умолчанию, насколько я смог проверить, так что же делает SetConstant?

(я не намерен изменить значение по умолчанию свойства, - просто пытаюсь понять, что эти вещи делают)

ответ

2

SetConstant является оберткой TypeBuilder.SetConstantValue(), который используется, чтобы связать константы времени компиляции с определенными метаданными IL, чаще всего параметры (со значениями по умолчанию) и const полей.

Его полезность для свойств кажется довольно сомнительной; это не влияет на то, какое значение фактически возвращается объекту свойств get. Казалось бы, значение по умолчанию, установленное через SetConstant(), может быть проверено только в метаданных или через отражение. Это может быть полезно, если вы хотите разрешить кому-либо определять значение по умолчанию, возвращаемое свойством, используя только рефлексию или анализ IL, но так как для аксессуара get не требуется фактическое возвращение этого значения, оно должно быть взято с зерном поваренная соль.