我正在阅读有关Kinect的内容,我发现了这段代码:
using System;
using System.ComponentModel;
using System.Linq.Expressions;
namespace Kinect.Toolbox {
public abstract class Notifier: INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged < T > (Expression < Func < T >> propertyExpression) {
var memberExpression = propertyExpression.Body as MemberExpression;
if (memberExpression == null)
return;
string propertyName = memberExpression.Member.Name;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我能够理解一点,但我想知道泛型如何在这里工作:
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression)
Linq Expression是值得关注的。
提供从中派生表示表达式树节点的类的基类。
This is a good resource for combining the generics with expression, it goes through an example
它是类型委托的参数('Func'是。它也可以使用'Action'或'Predicate'因为它们是委托类型)而Func <T>意味着你的委托将返回一种类型的T.