-2

代表的主要用途及其主要优点是什么?我们也可以使用简单的方法来代替委托,那为什么要使用委托呢?

4

2 回答 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);
}

它使用关闭lowerupper局部变量的 lambda。如果没有委托或 lambda,就不可能为此类任务实现如此清晰简洁的代码。

于 2012-09-14T03:39:46.577 回答
1

委托是正确完成的函数指针。

您可以在运行时“热插拔”功能。您可以将它们传递给其他函数。

于 2012-09-14T03:46:31.790 回答