最佳实践:我何时应该在.NET中使用委托?

DLa*_*uer 11 .net c# delegates

可能重复:
委派用法:业务应用程序
我在哪里使用委托?

嗨,

我不熟悉.NET中委托的概念 - 我还没有真正使用过它们并且认为它们可能存在的原因很充分 - 我应该何时使用委托?

例子非常受欢迎.

Gre*_*g D 8

委托提供了一种将行为作为参数传递的方法.

常见的例子是事件和异步编程,其中除了你的对象以外的东西负责调用你的对象.您使用委托提供该事件,现在它可以运行与该委托关联的行为.

在实现通用算法时,这也是一种有用的技术.曾经有一段时间我在编写非常相似的多种方法.也许它们循环使用相同的数据集,但它们执行的任务略有不同.我可以将委托传递给单个函数来执行该任务,然后从循环内部通过数据调用委托.这样我就不必多次在数据上实现循环,我只需要编写新代码来执行新事物 - 常见的行为都是以通用方式捕获的.

回应评论:

从循环内调用委托和从循环内调用方法之间的区别在于委托是包含循环的函数的参数.这意味着该函数可以执行任何操作,而不仅仅是在特定方法中定义的内容.可以并且已经利用这种灵活性在库中提供通用算法,完全独立于算法的具体内容.Linq是代表们灵活性所允许的普遍性的一个很好的例子.


Rex*_*x M 4

当您需要告诉另一段代码如何做某事时,委托非常有用。事件是最简单的例子 - 将事件(发生的事情)与如何处理它分开。其他示例是一些常见的迭代操作,例如自定义查找:

List<Foo> foos = new List<Foo>();
foos.Find(delegate(Foo foo)
    {
        if(foo.CustomProperty.Contains("special value"))
        {
            return false;
        }
        return true;
    });
Run Code Online (Sandbox Code Playgroud)

上面是一个完全任意的示例,但它表明您可以将“内容”(迭代并运行“查找”标准)与“方式” 如何确定是否找到某些内容)分开。


归档时间:

查看次数:

9056 次

最近记录:

16 年,6 月 前