如何创建具有类限制的属性

时间:2019-11-17 19:17:45

标签: c# .net attributes attributeusage

在C#中,有一个名为AttributeUsage的属性,如果您想将此属性设置为一个类,它将自动检测该类是否派生自Attribute类,否则将引发错误。

如何创建此类限制?

我想创建一个仅在特定类上可用/可设置的属性。

1 个答案:

答案 0 :(得分:1)

您尝试做的事情不可能仅通过属性AttributeUsage来实现,而是可以通过其他方式实现。

AttributeUsage具有ValidOn类型的AttributeTarget属性。它使您可以指定仅在class上有效,而在此类的类型上无效。

那么,为什么AttributeUsage仅适用于从Attribute派生的类?这是一个编译器规则CS0641

  

'attribute':属性仅在从System.Attribute派生的类上有效

     

使用了一个属性,该属性只能在从 System.Attribute 派生的类上使用。

它本身不是AttributeUsage的一部分。

如果要实现这样的目标,则需要编写自己的Roslyn分析器,该分析器将为您进行检查。关于如何编写一个的教程很少,即official onethis),我也建议查看roslyn-analyzers代码,CS0641不存在,因为它是一个编译器错误,而不是分析器错误,但是您可以在此处获得很多参考。

希望它对您有帮助,祝您好运!