为什么属性称为[Serializable]而不是[SerializableAttribute](C#)

时间:2015-04-20 17:20:37

标签: c# .net custom-attributes

我对.NET属性的理解存在漏洞。 Serializable类的类定义是:

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!”那一刻我怀疑......

1 个答案:

答案 0 :(得分:2)

C#语言规范允许编译器推断出类型名称的“属性”部分。正如@Jim在评论中解释的那样,您可以明确地包含类型名称的“属性”部分,但这不是必需的。这两种用法在语义上都是等价的。

MSDN文章here在“使用属性类”部分下进一步详细说明。最后但并非最不重要的是,C#语言规范中允许此行为的部分的实际citation

  

按照惯例,属性类以后缀Attribute命名。属性的使用可以包括或省略此后缀。