将属性限制为属性类型

时间:2019-11-21 20:31:09

标签: c# reflection types properties attributes

使用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 { }

1 个答案:

答案 0 :(得分:0)

@thehennyy指出,直到进一步通知,公认的答案是,我担心它不适用于自定义属性,而是由编译器针对AttributeUsage属性强制执行的。