我研究了ConditionalAttribute
声明,声明如下:
我发现了这样的JavaScript代码:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,
AllowMultiple = true)]
public sealed class ConditionalAttribute : Attribute {
//whatever
}
并AttributeTargets.Class
声称它可以将Attribute应用于类。所以我尝试了这个:
[Conditional("DEBUG")]
class MyClass
{
}
但是编译器发出以下错误
错误CS1689:属性'System.Diagnostics.ConditionalAttribute'仅对方法或属性类有效
和MSDN说
仅在ConditionalAttribute属性发生此错误。消息指出,此属性只能在方法或属性类上使用。例如,尝试将此属性应用于类将产生此错误。
因此,似乎有一个声明为适用于类的属性,但是尝试将其应用于类会导致编译错误。
这怎么可能?那是一些硬性联系的特殊情况还是什么?
是的,这ConditionalAttribute
是一种特殊情况,它是编译器直接直接处理的少数几个属性之一。
在这种情况下,编译器将没有明确定义的行为,因此它选择不让您这样做,以免造成混淆。
当然,从技术上讲,您可以在MSIL中编写一个标记为的非属性类,使用进行ConditionalAttribute
编译,ilasm
然后从C#项目中引用它-知道C#编译器的功能将非常有趣...我猜除非个别方法也有该方法,否则它不会做任何特别的事情,因为这是它针对的场景。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句