自定义属性可以查询它附加到的属性的值吗?

时间:2011-06-21 07:18:40

标签: c# reflection attributes properties

示例:

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

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

3 个答案:

答案 0 :(得分:3)

属性不知道它被分配给的成员,对于属性,只有通过反射访问它才会创建实例。你不能让一个属性直接与代码交互 - 虽然在编译时使用属性注入代码,但有一些像PostSharp这样的框架。

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

答案 1 :(得分:1)

我认为你已经开始进入面向方面编程的世界了。许多AOP框架提供了可扩展性点来定义您自己的自定义方面 - 这是我认为适合您的。

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

答案 2 :(得分:0)

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

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