我查看ConditionalAttribute声明,声明如下:
我发现javascript代码如下:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,
   AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute {
  //whatever
}

并且AttributeTargets.Class被认为意味着属性可以应用于类。所以我试了一下:
[Conditional("DEBUG")]
class MyClass
{
}

但是编译器会发出以下错误
错误CS1689:属性“system.diagnostics.conditionalattribute”仅对方法或属性类有效
msdn说
此错误仅在conditionalattribute属性中发生。消息声明,此属性只能用于方法或属性类。例如,尝试将此属性应用于类将生成此错误。
因此,看起来有一个属性被声明为适用于类,但是试图将其应用于类会导致编译错误。
这怎么可能?那是硬接线的特例还是什么?

最佳答案

是的,ConditionalAttribute是一种特殊情况,它是编译器直接处理的少数几个属性之一。
在这种情况下,编译器将没有定义良好的行为,因此它选择不让您这样做,以避免混淆。
当然,从技术上讲,您可以在msil中编写一个标记为ConditionalAttribute的非属性类,用ilasm编译它,然后从一个c项目中引用它——了解c编译器的功能会很有趣……我猜它不会有什么特别的,除非个别方法也有这个方法,因为这是它的目标场景。

08-27 00:50