【问题标题】:Restrict attribute to property type将属性限制为属性类型
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 1970-01-01
    • 2012-05-10
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2014-12-26
    • 2023-03-17
    相关资源
    最近更新 更多