代表的主要用途及其主要优点是什么?我们也可以使用简单的方法来代替委托,那为什么要使用委托呢?
问问题
168 次
2 回答
3
委托有很多很好的用途,但与简单方法相比,一个重要的好处是能够关闭环境。因此,如果没有委托或 lambda 或其他类似功能,就不可能编写像
public delegate int PartiallyApplied(int b);
public static PartiallyApplied CurriedAdd(int a)
{
return delegate (int b)
{
return a + b;
};
}
您可能想知道为什么关闭环境很有用。一个重要的用例是LINQ。仅保留特定范围内的序列元素的简单方法是
public IEnumerable<int> WithinRange(this IEnumerable<int> seq, int lower, int upper)
{
return select n from seq where n >= lower && n < upper;
}
(因为这是演示代码,它缺少生产代码的错误检查和其他功能)
此代码脱糖
public IEnumerable<int> WithinRange(this IEnumerable<int> seq, int lower, int upper)
{
return seq.Where(n => n >= lower && n < upper);
}
它使用关闭lower
和upper
局部变量的 lambda。如果没有委托或 lambda,就不可能为此类任务实现如此清晰简洁的代码。
于 2012-09-14T03:39:46.577 回答
1
委托是正确完成的函数指针。
您可以在运行时“热插拔”功能。您可以将它们传递给其他函数。
于 2012-09-14T03:46:31.790 回答