У меня есть класс следующим образом:Как получить поле поддержки Getter из PropertyInfo?
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
. Можно ли получить FieldInfo
или целевой элемент из метода get свойства?
Звучит разумно. Вариант использования очень специфичен для классов, которые наследуются от базового класса. Основываясь на нашем руководстве по кодированию, мы можем обеспечить соблюдение правил использования. Благодарю. – IAbstract