有没有办法在运行时获取属性的声明方法/属性

时间:2014-08-18 08:53:42

标签: c# reflection

好的,请考虑以下情况:

public class Foo()
{
    [FooProperty]
    public int Blah { get { .... } }

    ...
}

[AttributeUsage(AttributeTargets.Property)]
public class FooPropertyAttribute: Attribute
{
    public FooPropertyAttribute()
    {
        //Is there any way to get at runtime a PropertyInfo of the declaring property 'Foo.Blah'?
    }

    ...
}

我知道这可能不是一个好主意,但最近,在原型设计时,问题出现了,我很想知道这是否可行。

1 个答案:

答案 0 :(得分:1)

由于你必须主动寻找这些属性,你可以做任何你想做的事。

例如,如果你有这样的代码:

foreach (var propertyInfo in type.GetProperties())
{
    if (propertyInfo.IsDefined(typeof(FooPropertyAttribute), true))
    {
        var attr = (FooPropertyAttribute)propertyInfo.GetCustomAttributes(typeof(FooPropertyAttribute), true)[0];
        attr.FooMethod(propertyInfo); // <-- here
    }
}

然后如您所见,您可以将属性info对象传递给它。

除此之外,不,不仅仅是.NET的内置属性系统。

PostSharp这样的事情可能会得到支持,但这是一个完全不同的问题。