我正在查看一些C#代码,它使用属性后缀应用多个LINQ to SQL属性,例如: ColumnAttribute
,而不是我以前使用的普通Column
。这样做有什么理由但是冗长吗?
答案 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
可能会生成代码,但代码生成器的作者可能正在尝试创建满足尽可能多标准的代码。