我查看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编译器的功能会很有趣……我猜它不会有什么特别的,除非个别方法也有这个方法,因为这是它的目标场景。