ConditionalAttribute和其他特殊类

Geo*_*ett 6 c# compiler-construction language-features attributes

ConditionalAttribute可用于除去呼叫取决于所定义的编译器的符号的显着方法.我假设我们不能自己创建这个类,因为编译器必须专门寻找它.

我想知道编译器或语言使用的其他类是什么,我们无法自己编码.

Mar*_*ell 6

除了提到的那些;

AttributeUsageAttribute
Run Code Online (Sandbox Code Playgroud)

有特殊的编译器支持,因为它限制(在编译时)如何应用属性

ObsoleteAttribute
Run Code Online (Sandbox Code Playgroud)

编译器也使用它来警告或使用错误.

怀疑,从技术上讲,你可以自己编写所有这些 - 只要你编写自己的核心库和System.dll; p编译器通常会寻找模式/签名,因为它必须满足不同的运行时 - 实际上您不必使用MS核心库.的行为,但是,由编译器,而不是类定义的-所以你不能让它做什么不同.

  • @Matt - 不,你不需要编写编译器.您使用现有的编译器,但使用`/ nostdlib`告诉它不要使用`mscorlib.dll`,并提供您自己的ECMA335中定义的(包括已发布的强名称签名等) (2认同)

Jon*_*eet 4

基本上查看System.Runtime.CompilerServices命名空间,并检查其中的属性...其中许多属性将由编译器专门处理即使它不是 C# 编译器(例如,DateTimeConstantAttribute据我所知,C# 编译器不使用这些属性) ,但是DecimalConstantAttribute确实如此。C# 编译器可能会消耗量值DateTime,即使它不会生成它们...)