新手问题:除非我弄错了,否则大多数属性看起来都是良性的,直到你在程序集或类上使用运行时反射来发现属性并对它们采取行动。我注意到ObsoleteAttribute
似乎在.NET属性中是唯一的,它可以在编译期间动态地引发警告和错误:
[Obsolete("don't use", false)]
public string Name { get; set; }
我的问题是它是如何做到的?这是内置于编译器的内容,因为相关的警告消息编号似乎特定于ObsoleteAttribute?我已经谷歌了,找不到任何明显的答案。我知道使用C ++和一些漂亮的宏技巧,你可以让C ++按需发出警告和错误,但C#如何做到这一点?感谢...
答案 0 :(得分:7)
是的,编译器知道ObsoleteAttribute
- 它甚至在C#4语言规范的第17.4.3节中列出。
(编译器还需要了解AttributeUsageAttribute
和ConditionalAttribute
,并且MS编译器知道IndexerNameAttribute
以及System.Runtime.InteropServices
中的一些其他属性。)
答案 1 :(得分:2)
你是对的,这个属性的识别和解释是内置在编译器中的。
答案 2 :(得分:1)
正如Skeet所说,编译器知道ObsoleteAttribute。这也不是唯一的一个;也可以查看ConditionalAttribute。