在C#中,有一个名为AttributeUsage
的属性,如果您想将此属性设置为一个类,它将自动检测该类是否派生自Attribute类,否则将引发错误。
如何创建此类限制?
我想创建一个仅在特定类上可用/可设置的属性。
答案 0 :(得分:1)
您尝试做的事情不可能仅通过属性AttributeUsage
来实现,而是可以通过其他方式实现。
AttributeUsage
具有ValidOn
类型的AttributeTarget
属性。它使您可以指定仅在class
上有效,而在此类的类型上无效。
那么,为什么AttributeUsage
仅适用于从Attribute
派生的类?这是一个编译器规则CS0641
'attribute':属性仅在从System.Attribute派生的类上有效
使用了一个属性,该属性只能在从 System.Attribute 派生的类上使用。
它本身不是AttributeUsage
的一部分。
如果要实现这样的目标,则需要编写自己的Roslyn分析器,该分析器将为您进行检查。关于如何编写一个的教程很少,即official one或this),我也建议查看roslyn-analyzers
代码,CS0641
不存在,因为它是一个编译器错误,而不是分析器错误,但是您可以在此处获得很多参考。
希望它对您有帮助,祝您好运!