我已经实现了 INotifyPropertyChanged 的强类型实现,除了不使用接口,我添加了一个基类来实现。
它工作正常,但我正在努力解决的问题是为什么在基本方法声明中使用 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);
}
}