我要做的是拥有一个可以继承的类,并能够跟踪对属性的更改。
我有一个称为TrackedEntity的基类。
然后我创建另一个从TrackedEntity继承的类TestEntity。
在我的TestEntity类上,我用一个称为CompareValues的属性标记了我的一个字段。
TrackedEntity
public class TrackedEntity {
public void GetCompareValues<T> () {
var type = typeof (T);
var properties = type.GetProperties ();
foreach (var property in properties) {
var attribute = (CompareValues[]) property.GetCustomAttributes
(typeof(CompareValues), false);
var hasAttribute = Attribute.IsDefined (property, typeof
(CompareValues));
}
}
}
TestEntity
public class TestEntity : TrackedEntity
{
public int one { get; set; }
[CompareValues]
public int two { get; set; }
public int three { get; set; }
}
CompareValues属性:
[AttributeUsage ( AttributeTargets.Property |
AttributeTargets.Field,
Inherited = true)]
public class CompareValues : Attribute {
public CompareValues () { }
}
然后我就可以这样做
var test = new TestEntity ();
test.GetCompareValues<TestEntity> ();
在我的GetCompareValues方法中,我可以找到TestEntity中的哪些字段使用我的CompareValues属性。
我试图找到一种方法来访问具有CompareValues属性的字段的值,以便我可以跟踪更改并记录有关该字段的信息。
如果还有其他方法可以通过使用另一种方法来完成此操作,请告诉我。
谢谢。
答案 0 :(得分:2)
您快到了。您需要做的就是获取当前实例(调用了该方法的实例)上的属性值:
if(hasAttribute)
{
var value = property.GetValue(this, null);
}
除此之外,您在这里不需要泛型。只需使用此:
var type = this.GetType();
如果实例属于您的派生类型,则返回TestEntity
。