从实例化对象中访问自定义属性
本文关键字:访问 自定义属性 对象 实例化 | 更新日期: 2023-09-27 17:54:38
我正试图找到一种方法来访问从对象内的属性级别应用的属性,但我遇到了瓶颈。数据似乎存储在类型级别,但我需要它存储在属性级别。
下面是我想做的一个例子:
public class MyClass
{
[MyAttribute("This is the first")]
MyField First;
[MyAttribute("This is the second")]
MyField Second;
}
public class MyField
{
public string GetAttributeValue()
{
// Note that I do *not* know what property I'm in, but this
// should return 'this is the first' or 'this is the second',
// Depending on the instance of Myfield that we're in.
return this.MyCustomAttribute.value;
}
}
属性不是这样使用的。属性存储在包含该属性的类对象中,而不是在类中声明的成员对象/字段中。
由于您希望每个成员都是唯一的,因此感觉更像是MyField
的成员数据,由构造函数传入。
如果你执意要使用一个属性,你可以在你的构造函数中添加代码,对每个有属性的成员使用反射,并尝试将其实例数据设置为你想要的,但是你需要确保所有的MyField
对象都是完全构造的。
或者你可以让setter看起来像这样:
private MyField _first;
[MyAttribute("This is the first")]
public MyField First {
get { return _first; }
set {
_first = value;
if (_first != null) {
_first.SomeAttribute = GetMyAttributeValue("First");
}
}
}
private string GetMyAttributeValue(string propName)
{
PropertyInfo pi = this.GetType().GetPropertyInfo(propName);
if (pi == null) return null;
Object[] attrs = pi.GetCustomAttributes(typeof(MyAttribute));
MyAttribute attr = attrs.Length > 0 ? attrs[0] as MyAttribute : null;
return attr != null ? attr.Value : null;
}