C#自定义属性命名

时间:2011-04-01 13:47:07

标签: c# .net visual-studio-2010 attributes

我有一个自定义属性类,我定义为:

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public sealed class MyCustomAttribute : System.Attribute
{
    ...
}

来自微软网站:

  

按惯例,名称   属性类以单词结尾   属性。虽然不是必需的,但这个   建议使用惯例   可读性。当属性是   应用,包含这个词   属性是可选的。

因此,该属性可以由

使用
[MyCustom()]

[MyCustomAttribute()]

我的问题是,如果有人在使用名称的缩写版本与全名时遇到任何问题吗?我正在运行4.0框架。

谢谢!

4 个答案:

答案 0 :(得分:12)

没问题。

在编译的IL下面,名称总是附加了一个Attribute(完整的类型名称)。

基于ECMA-334(C#规范)24.2,首先通过完全匹配完成分辨率,然后将“属性”附加到[]中给出的名称。此外,如果存在冲突(例如:MyAttribute和MyAttributeAttribute),则在使用“MyAttribute”时会生成编译时错误。

答案 1 :(得分:9)

应该没问题......我只是建议你不要引入两个名称只有属性后缀数量不同的属性:

public class FooAttribute : Attribute { }

public class FooAttributeAttribute : Attribute { }

[FooAttribute] // Could be either!

怀疑完全匹配会赢得这里,但请不要首先介绍歧义。 (我没有查看规格。)

答案 2 :(得分:1)

不。很容易就是馅饼!

此外,您可以在没有空()括号

的情况下使用它

答案 3 :(得分:0)

一般来说,你不应该遇到任何问题。在任何一种情况下,C#编译器都足够智能,可以将其解析为正确的类型。