ObsoleteAttribute如何工作?

Bar*_*rry 4 c#

新手问题:除非我弄错了,否则大多数属性看起来都是良性的,直到你在程序集或类上使用运行时反射来发现属性并对它们采取行动.我注意到ObsoleteAttribute.NET属性中似乎是唯一的,它可以在编译期间动态地引发警告和错误:

    [Obsolete("don't use", false)]  
    public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的问题是它是如何做到的?这是内置于编译器的内容,因为相关的警告消息编号似乎特定于ObsoleteAttribute?我已经谷歌了,找不到任何明显的答案.我知道使用C++和一些漂亮的宏技巧,你可以让C++按需发出警告和错误,但C#如何做到这一点?谢谢...

Jon*_*eet 7

是的,编译器知道ObsoleteAttribute- 它甚至在C#4语言规范的第17.4.3节中列出.

(编译器还需要知道AttributeUsageAttributeConditionalAttribute,并且MS编译器知道其中的IndexerNameAttribute一些其他属性System.Runtime.InteropServices.)