C# 自定义属性是否可以查询其属性的值';什么是附属的?

C# 自定义属性是否可以查询其属性的值';什么是附属的?,c#,reflection,attributes,properties,C#,Reflection,Attributes,Properties,例如: [OnlyShowIfValueIsNonZero] public int Foo { get; set; } 在OnlyShowIfValueIsNonZero的代码中,我需要能够查询Foo的值。这可能吗?如果是,如何创建?属性不知道分配给它的成员,对于属性,只有通过反射访问它时才会创建实例。您不能让属性直接与代码交互——尽管有一些像PostSharp这样的框架在编译时使用属性注入代码 但是,您可以从反射提供分配给它的成员,并且由于您已经需要该成员访问其属性,您可以在该属性中创建一个

例如:

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

OnlyShowIfValueIsNonZero
的代码中,我需要能够查询
Foo
的值。这可能吗?如果是,如何创建?

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

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

可能是这样的。 例如,T是你的班级

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

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


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

假设使用此属性的代码可以访问类类型和实例。如果是这样的话,那么就变成了一个从实例和
类型中获取属性值的问题,这个问题已经被回答了很多次。