为什么我不能在类上使用ConditionalAttribute?

sha*_*oth 4 .net c# attributes conditional-attribute

我查看ConditionalAttribute声明,它声明如下:

我发现JavaScript代码是这样的:

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

AttributeTargets.Class声称该属性可以应用于一个类.所以我试过这个:

[Conditional("DEBUG")]
class MyClass
{
}
Run Code Online (Sandbox Code Playgroud)

但编译器发出以下错误

错误CS1689:属性'System.Diagnostics.ConditionalAttribute'仅对方法或属性类有效

和MSDN说

只有ConditionalAttribute属性才会出现此错误.如消息所述,此属性只能用于方法或属性类.例如,尝试将此属性应用于类将生成此错误.

所以看起来有一个属性声明适用于类但是尝试将它应用于类会导致编译错误.

这怎么可能?这是一些硬连线的特殊情况还是什么?

Ath*_*ari 5

好的:

[Conditional("DEBUG")]
public void foo() { }
Run Code Online (Sandbox Code Playgroud)

还好吧:

[Conditional("DEBUG")]
public class BarAttribute : Attribute { }
Run Code Online (Sandbox Code Playgroud)

不行:

[Conditional("DEBUG")]
public class Baz { }
Run Code Online (Sandbox Code Playgroud)

ConditionalAttribute可以应用于类,但是作为属性类的类还有一个额外的限制.

如果你想根据条件定义删除整个类,那么不,你不能这样做.它不受支持.您必须单独标记每种方法.