2014-02-17 21 views
1

我想問一下PropertyAttribute.HasDefault枚舉值在使用System.Reflection.Emit.TypeBuilder.DefineProperty方法定義屬性時的目的是什麼?當應該使用PropertyAttributes.HasDefaultPropertyAttributes.None時,它會發生什麼變化?PropertyAttributes.HasDefault和PropertyBuilder.SetConstant的含義

據我所知,它與PropertyBuilder的SetConstant方法有關,但它並沒有真正改變屬性的默認值,只要我能夠測試,那麼SetConstant究竟做了什麼?

(我不原意改變屬性的默認值 - 只是想了解一下這些東西呢)

回答

2

SetConstant是一個包裝周圍TypeBuilder.SetConstantValue(),這是用來與某些IL元數據編譯時間常數相關聯,最常見的參數(使用默認值)和const字段。

它對物業的用處似乎相當可疑;它不會影響該屬性的get訪問者實際返回的值。似乎通過SetConstant()設置的默認值只能在元數據中或通過反射進行檢查。如果您想允許某人使用反射或IL分析僅允許某人確定屬性返回的默認值,但可能會很有用,但由於get訪問器不需要實際返回該值,因此應該使用一粒鹽。