2012-11-14 324 views
8

實現ICustomAttributeProvider接口的某些內容將允許您通過GetCustomAttributes方法獲取已應用於其的自定義屬性。據我所知,一個自定義屬性基本上是一個特殊的類(以「屬性」結尾,並擴展了類),它被創建用於類似方法或類的東西,使用適當的語法([FooAttribute]就在方法/類之前/例如在C#中)。但是如果這是一個自定義屬性,什麼是 -custom屬性?我曾經認爲與.NET捆綁在一起的屬性是非定製的,但是GetCustomAttributes甚至會返回屬性,如System.ThreadStaticAttribute,它們是.NET框架的核心。自定義與非自定義屬性?

有沒有這樣的事情作爲非自定義屬性,或者是「自定義屬性」只是一個重言式?

回答

2

我不知道下面有任何關聯的CLI規範,但如果你說

var a = typeof(string).Attributes; 

你會得到一個名爲TypeAttributes一個標誌枚舉類型的值。也許這些標誌是類型的「非定製」屬性?

+0

我認爲這可能是正確的。自定義屬性是不是「類型屬性」的東西。 – Jez

+0

有關更多說明,我只是在MSDN上閱讀:*「幾乎所有Reflection類都可以具有與它們相關的屬性,屬性可以是標準(公共,私有,HelpString)或自定義。」* – Jez

5

Attribute派生的所有內容都是自定義屬性。

「屬性」是一個通用術語。現實世界中的物體具有無數的屬性。類,成員和參數都有,我們可以描述的屬性 - 名稱,類型,訪問者成員人數,繼承信息等

定製屬性都是我們粘性上 - 方面我們想要聯想和用來描述,但哪些不是固有的。

2

Wikipedia,報價:

開發人員可以通過屬性來他們的代碼添加元數據。 是屬性的兩種類型,自定義屬性和僞自定義屬性,並且這些開發者具有相同的語法。代碼中的屬性是 消息給編譯器以生成元數據。在CIL中,元數據(例如 )作爲繼承修飾符,範圍修飾符以及幾乎任何不是操作碼或流的任何東西,也稱爲屬性。

參見有關擴展元數據,其中引用發現了「定製」一詞屬性(例如I.9.7在http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf