【发布时间】:2020-03-17 21:04:40
【问题描述】:
使用AttributeUsage 属性,我可以将属性的有效目标限制为某些实体类型(类、属性等)。但是,如何进一步限制它,使其只能应用于某种类型的属性?
例如:
[MyAttribute] // Valid
public Foo Item { get; set; }
[MyAttribute] // Compilation error: "Attribute 'MyAttribute' is only valid on classes derived from Foo"
public int Value { get; set; }
我很确定这应该是可行的,因为如果我们尝试将AttributeUsage 属性应用于不是从Attribute 派生的类,它本身就有这个限制:
[AttributeUsage(AttributeTargets.Property)] // Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute
public class Bar { }
【问题讨论】:
-
没有开箱即用的机制。
AttributUsageAttribute的限制由编译器强制执行,但无法扩展要求。 -
您可以使用Roslyn analyzer 来强制执行此限制,但我认为您的属性的用户可以绕过它,如果他们愿意。
标签: c# reflection types properties attributes