2015-04-20 122 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