【发布时间】:2016-07-20 20:59:13
【问题描述】:
我有一堂课如下:
class Foo : PropertyChangedBase {
private int _property;
public int Property {
get { return _property; }
set { OnAssignPropertyChanged("Property", () => _property, value); }
}
PropertyChangedBase 使用以下方法实现INotifyPropertyChanged:
protected void OnAssignmentPropertyChanged<T>(string propertyName, Expression<Func<T>> fieldExpression, T value)
{
var get = fieldExpression.Compile();
if (get().Equals(value))
{
return;
}
// invoke set property method
SetProperty(fieldExpression, value);
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private void SetProperty<T>(Expression<Func<T>> fieldExpression, T value)
{
if (fieldExpression == null)
{
throw new ArgumentNullException(nameof(fieldExpression));
}
var memberExpression = fieldExpression.Body as MemberExpression;
if (memberExpression == null)
{
throw new ArgumentException("fieldExpression");
}
var field = memberExpression.Member as FieldInfo;
if (field == null)
{
throw new ArgumentException("fieldExpression");
}
field.SetValue(this, value);
}
我想打电话:
OnAssignPropertyChanged(() => Property, value);
唯一可行的方法是,如果我可以获得属性 getter 的支持字段,然后将其传递给 SetProperty。是否可以通过属性get方法获取FieldInfo或目标成员?
【问题讨论】:
标签: c# reflection inotifypropertychanged getter propertyinfo