2015-04-20 97 views
0

我對.NET屬性的理解有一個漏洞。對於序列化類的類定義是這樣的:爲什麼這個屬性叫做[Serializable]而不是[SerializableAttribute](C#)

namespace System { 
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Delegate, Inherited = false)] 
    [ComVisible(true)] 
    public sealed class SerializableAttribute : Attribute { 
     public SerializableAttribute(); 
    } 
} 

但爲什麼當您使用它叫[Serializable接口]而不是[SerializableAttribute]?儘管你似乎可以使用後者。

這裏是否有某種別名出現?這將是一個「doh!」當我懷疑...

+0

謝謝 - 這是一個重複的問題。我搜索了屬性別名而不是縮寫。當你不知道答案時,常常有一半的問題知道要搜索什麼 –

回答

2

C#語言規範允許編譯器推斷到類型名稱的'屬性'部分。正如@Jim在註釋中解釋的那樣,你可以明確地包含類型名稱的'屬性'部分,但這不是必需的。兩種用法在語義上都相同。

MSDN文章here在「使用屬性類」部分下進一步詳細說明。最後但並非最不重要的,在C#語言規範的部分,允許這種行爲的實際citation

按照約定,屬性類的名稱均帶有Attribute後綴。屬性的使用可以包括或省略此後綴。

+0

是的,正確的。如果你喜歡,你仍然可以添加「屬性」,如果你喜歡,但它被認爲是多餘的,因此是別名。 – Jim