委托基本上是对方法的引用。
例如,您可以使用不同的方法来更改字符串:
public static string ChangeOne(string s) {
return s.TrimStart();
}
public static string ChangeTwo(string s) {
return s.TrimEnd();
}
根据某些标准,您可以在它们之间进行选择,并将选择放在委托中:
Func<string, string> change;
if (DateTime.Today.DayOfWeek == DayOfWeek.Sunday) {
change = ChangeOne;
} else {
change = ChangeTwo;
}
然后你可以使用委托只是一个常规方法。使用它的代码不必知道该方法的作用或原因:
string x = " asdf ";
x = change(x);
例如,委托广泛用于泛型集合,其中库方法不必了解集合中的对象的任何信息。您只需为它提供一个委托给一个挑选相关信息的方法。
这里的Where
方法对列表中的对象一无所知,它只获得一个方法的委托,该方法确定一个对象是否应该包含在结果中:
IEnumerable<obj> older = listOfObj.Where(o => o.Age >= 18);