J'ai une classe comme suit:Comment obtenir le champ de support Getter à partir de PropertyInfo?
class Foo : PropertyChangedBase {
private int _property;
public int Property {
get { return _property; }
set { OnAssignPropertyChanged("Property",() => _property, value); }
}
PropertyChangedBase
implémente INotifyPropertyChanged
avec les méthodes suivantes:
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);
}
Je préférerais appeler:
OnAssignPropertyChanged(() => Property, value);
La seule façon dont cela fonctionne est si je peux obtenir le champ de sauvegarde pour le getter de propriété, puis passer à SetProperty
. Est-il possible d'obtenir le FieldInfo
ou un membre de la propriété get méthode?
Cela semble raisonnable. Le cas d'utilisation est très spécifique pour les classes qui héritent de la classe de base. Basé sur notre guide de codage, nous pouvons appliquer les règles d'utilisation. Merci. – IAbstract