好的,请考虑以下情况:
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'?
}
...
}
我知道这可能不是一个好主意,但最近,在原型设计时,问题出现了,我很想知道这是否可行。
答案 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这样的事情可能会得到支持,但这是一个完全不同的问题。