我已經實現了INotifyPropertyChanged的強類型實現,除了使用接口之外,我添加了一個基類來實現。爲什麼這個通用方法實現不需要傳遞Type值?
它工作正常,但我掙扎位就是爲什麼TValue在基本方法聲明中使用(我沒有使用這一部分從一些代碼,我在網上找到)
NotifyPropertyUpdate<TValue>(
...
但在派生類中,它根本不需要通過TValue
!
什麼告訴編譯器在運行時解決這個問題,而不是抱怨構建?
謝謝,
基類:
public class NotifyFuncPropertyChanged<T> : INotifyPropertyChanged
{
#region Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyUpdate<TValue>(Expression<Func<T, TValue>> selector)
{
//get memberInfo from object selection
MemberInfo memberInfoSelection;
Expression body = selector;
if (body is LambdaExpression)
{
body = ((LambdaExpression)body).Body;
}
switch (body.NodeType)
{
case ExpressionType.MemberAccess:
memberInfoSelection =((MemberExpression)body).Member;
break;
default:
throw new InvalidOperationException();
}
//send notifyupdate to memberInfo
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(memberInfoSelection.Name));
}
}
#endregion
}
用法(派生類)
public class NameTest : NotifyFuncPropertyChanged<NameTest>
{
public string Name { get; set; }
public void TestUpdateName()
{
this.NotifyPropertyUpdate(x => x.Name);
}
}
很好的答案 - 謝謝。 –