【问题标题】:Can a custom attribute query the value of the property it's attached to?自定义属性可以查询它附加到的属性的值吗?
【发布时间】:2011-09-19 06:49:56
【问题描述】:

例子:

[OnlyShowIfValueIsNonZero]
public int Foo { get; set; }

OnlyShowIfValueIsNonZero 的代码中,我需要能够查询Foo 的值。这可能吗?如果是,怎么做?

【问题讨论】:

  • 大概您的使用此属性的代码可以访问类类型和实例。如果是这样,那么它就变成了从实例和Type获取属性值的问题,这个问题已经回答了很多次了。

标签: c# reflection attributes properties


【解决方案1】:

属性不知道分配给它的成员,并且对于属性,只有通过反射访问它时才会创建实例。您不能让属性直接与代码交互 - 尽管 PostSharp 等一些框架在编译时使用属性注入代码。

但是,您可以通过反射提供分配给它的成员,并且由于您已经需要该成员来访问其属性,因此您可以在该属性中创建一个接受该成员作为参数的方法。

【讨论】:

    【解决方案2】:

    我认为您在这里开始进入面向方面编程的世界。许多 AOP 框架提供了可扩展点来定义您自己的自定义方面——我认为这很适合您。

    PostSharp 是一个非常流行的 .NET AOP 框架

    【讨论】:

      【解决方案3】:

      也许,就是这样。 例如,T 是你的班级...

      foreach (PropertyInfo propertyInfo in (typeof(T)).GetProperties()){
          foreach (object attribute in propertyInfo.GetCustomAttributes(true))
          {
              if ( attribute is OnlyShowIfValueIsNonZero )
              {
                 ......
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        相关资源
        最近更新 更多