为什么属性称为 [Serializable] 而不是 [SerializableAttribute] (C#)
Why is the attribute called [Serializable] and not [SerializableAttribute] (C#)
我对 .NET 属性的理解存在漏洞。 Serializable class 的 class 定义是这样的:
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!" 我怀疑的时刻...
C# 语言规范允许编译器推断类型名称的 'Attribute' 部分。正如@Jim 在评论中解释的那样,您可以明确包含类型名称的 'Attribute' 部分,但这不是必需的。两种用法在语义上是等价的。
允许此行为的 C# 语言规范部分的 MSDN 文章 here goes into further detail under the 'Using an Attribute Class' section. Last but not least, the actual citation:
By convention, attribute classes are named with a suffix of Attribute. Uses of an attribute may either include or omit this suffix.
我对 .NET 属性的理解存在漏洞。 Serializable class 的 class 定义是这样的:
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!" 我怀疑的时刻...
C# 语言规范允许编译器推断类型名称的 'Attribute' 部分。正如@Jim 在评论中解释的那样,您可以明确包含类型名称的 'Attribute' 部分,但这不是必需的。两种用法在语义上是等价的。
允许此行为的 C# 语言规范部分的 MSDN 文章 here goes into further detail under the 'Using an Attribute Class' section. Last but not least, the actual citation:
By convention, attribute classes are named with a suffix of Attribute. Uses of an attribute may either include or omit this suffix.