首页 > 解决方案 > 将属性限制为属性类型

问题描述

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

标签: c#reflectiontypespropertiesattributes

解决方案


在另行通知之前,正如@thehennyy 指出的那样,我担心的答案是,它不适用于自定义属性,而是由编译器对 AttributeUsage 属性强制执行。


推荐阅读