在C#中,是否可以检查一个属性是否有一个在运行时引用另一个对象的Setter?
下面是一些代码:
private PropertyChanged _propertyChanged;
public string PropertyChangedName
{
get
{
return _propertyChanged.Name;
}
set
{
_propertyChanged.Name = value;
}
}在上面的代码中,PropertyChangedName被作为PropertyChanged对象的一部分引用。设置PropertyChangedName时,将设置_propertyChanged.Name。
下面是一些代码,其中PropertyChangedName未作为PropertyChanged对象的一部分进行引用:
private string _propertyChangedName;
public string PropertyChangedName
{
get
{
return _propertyChangedName;
}
set
{
_propertyChangedName = value;
}
}发布于 2017-02-07 10:57:40
我不确定这是不是最好的方法,但是,它可能会对你有所帮助:
// store the current state:
var valuesbefore = new List<object>();
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic))
valuesbefore.Add(r.GetValue(this));
// change the value the specified property
PropertyChangedName = PropertyChangedName + "a";
//get the new state of the class:
var valuesnow = new List<object>();
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic))
valuesnow.Add(r.GetValue(this));
// check for any change
bool equal = valuesbefore.SequenceEqual(valuesnow);如果equal值为false,则意味着您正在处理setter更改private字段的值的情况。请注意,在处理string、int等以外的类型时需要特别小心。
发布于 2017-02-07 11:54:57
您可以实现INotifyPropertyChanged并订阅它。
发布于 2017-02-07 13:15:21
这是一个非常棘手的问题。.NET中的System.Reflection库允许您观察类签名(类型、字段、方法等),调用它们并获取它们的值;但不能在它们的主体中看到它们。
通读this question中的答案,了解一些检查方法内容的选项。(属性只是一个方法--如果同时具有get和set,则为两个)
https://stackoverflow.com/questions/42080591
复制相似问题