我有一个自定义属性类,我定义为:
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public sealed class MyCustomAttribute : System.Attribute
{
...
}
来自微软网站:
按惯例,名称 属性类以单词结尾 属性。虽然不是必需的,但这个 建议使用惯例 可读性。当属性是 应用,包含这个词 属性是可选的。
因此,该属性可以由
使用[MyCustom()]
或
[MyCustomAttribute()]
我的问题是,如果有人在使用名称的缩写版本与全名时遇到任何问题吗?我正在运行4.0框架。
谢谢!
答案 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#编译器都足够智能,可以将其解析为正确的类型。