次のように私はクラスを持っている:私が呼ぶことを好むだろうPropertyInfoからGetterバッキングフィールドを取得するには?
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);
}
:
class Foo : PropertyChangedBase {
private int _property;
public int Property {
get { return _property; }
set { OnAssignPropertyChanged("Property",() => _property, value); }
}
PropertyChangedBase
は、以下の方法でINotifyPropertyChanged
を実装
OnAssignPropertyChanged(() => Property, value);
これが動作する唯一の方法プロパティゲッタのバッキングフィールドを取得してからSetProperty
に渡すことができるかどうかです。プロパティgetメソッドからFieldInfo
またはターゲットメンバーを取得することは可能ですか?
合理的に聞こえる。ユースケースは、基底クラスから継承するクラスに非常に特化しています。私たちのコーディングガイドに基づいて、私たちは使用のための規則を強制することができます。ありがとう。 – IAbstract