使用带有'Attribute'后缀的C#属性有什么用?

时间:2011-07-15 16:42:54

标签: c# .net attributes

我正在查看一些C#代码,它使用属性后缀应用多个LINQ to SQL属性,例如: ColumnAttribute,而不是我以前使用的普通Column。这样做有什么理由但是冗长吗?

7 个答案:

答案 0 :(得分:6)

没有语义差异。编写代码的人可能只是更喜欢这种符号。

也可能使用工具自动生成代码。代码生成工具通常不会从属性的类型名称中删除Attribute位。

答案 1 :(得分:3)

该属性称为ColumnAttribute。编译器只提供了syntactic-sugar,允许你在没有Attribute后缀的情况下指定它们。

没有实际的区别。

答案 2 :(得分:3)

大多数属性以Attribute一词结尾,包括ColumnAttribute,CLSCompliantAttribute和SerializableAttribute。编译器允许省略最后一个字属性。程序员可以选择是否将属性添加到这些名称中。

然而,属性后缀仅仅是一种约定:定义属性是完全有效的,尽管不寻常,例如,如下所示:

    [AttributeUsage(AttributeTargets.All)]
    public class Foo : Attribute {

    }

就像定义一个名为Throwable的异常一样,例如。

答案 3 :(得分:2)

不,这只是一种风格决定。但是,如果您正在查看的是使用CodeDOM生成的代码,则预期会出现后缀,因为C#代码生成器在添加属性时将保留完整的___Attribute类型名称。

答案 4 :(得分:1)

它们在语法上是一样的。 AFAIK没有理由这样做,除非有问题的人不熟悉C#中的语法糖在通过方括号添加属性时自动添加“属性”后缀这一事实。

答案 5 :(得分:1)

Column只是ColumnAttribute的昵称,在语法上与功能完全相同,并且编译器允许使用任何一种形式。 有些人更喜欢使用全名,因为习惯遵循Framework Naming Guidelines,这鼓励将属性添加到自定义属性类,或者 I 添加到界面类型。

答案 6 :(得分:0)

如果您查看飞利浦医疗保健 - C#编码标准规则3 @ 122,您可以看到他们实际上希望编码人员为属性添加后缀“属性”。 http://www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

可能会生成代码,但代码生成器的作者可能正在尝试创建满足尽可能多标准的代码。