gpt4 book ai didi

c# - 委托(delegate)使用 : Business Applications

转载 作者:太空狗 更新时间:2023-10-29 22:15:26 25 4
gpt4 key购买 nike

背景

鉴于“大多数”开发人员都是业务应用程序开发人员,我们最喜欢的编程语言的功能会在我们使用它们进行的工作的上下文中使用。

作为 C#/ASP.NET 应用程序开发人员,我倾向于只在处理 UI 事件时使用委托(delegate)。事实上(这是我缺乏经验的表现的一部分),我除了使用委托(delegate)的事件之外甚至不知道一个好的上下文!这很可怕;但我了解到还有其他开发人员在同一条船上。

注意:答案应与 .NET 2.0 相关。 .NET 3.0 将委托(delegate)带到了一个完全不同的层次,这可能是一个单独的问题。

问题:

Besides events, how useful are delegates, and in what Business Application contexts are they most useful?

更新:Jarrod Dixon helpfully linked到 MSDN 文档 regarding delegate usage ,我必须承认我的 favorite Design Patterns Book根本没有提出委托(delegate),所以除了 UI 事件之外,我还没有真正看到它们的使用。为了扩展这个问题(只是一点点!),您可以为业务应用程序(或者实际上,任何必须处理相关问题的应用程序)提供哪些示例,以便更容易理解有关该主题的 MSDN 文档?

最佳答案

我认为这个问题反射(reflect)了给猫剥皮的多种方法。我发现委托(delegate)(和 lambda)几乎与“for”循环一样基础。

这是我最近使用委托(delegate)的一个上下文(出于演示目的更改了格式和名称:)

protected T[] SortLines<T>(Func<T> createLine, IEnumerable<T> unsorted)
where T : LineType
{
Func<IEnumerable<T>, IEnumerable<T>> sorter = (lines => lines);

switch (settings.OrderSort)
{
case OrderSort.ByA:
sorter = (lines => lines.OrderBy(x => x.A)); break;
case OrderSort.ByB:
sorter = (lines => lines.OrderBy(x => x.B)); break;

// and so on... a couple cases have several levels of ordering
}

bool requiresSplit = // a complicated condition
if (requiresSplit)
{
var positives = unsorted.Where(x => x.Qty >= 0);
var negatives = unsorted.Where(x => x.Qty < 0);

return sorter(negatives).Concat(
new T[] { createLine.Invoke() }).Concat(
sorter(positives)).ToArray();
}
else
return sorter(unsorted).ToArray();
}

因此,这会根据某些条件对一组项目进行排序,然后它要么返回排序后的整个列表,要么将其分成两部分,分别对两半进行排序,并在它们之间放置一个分隔符。如果您不能表达“一种排序方式”的概念,那么祝您优雅地做到这一点,这正是委托(delegate)的目的。

编辑:我猜 Concat 和 OrderBy 是 3.0 特定的,但这仍然是基本思想。

关于c# - 委托(delegate)使用 : Business Applications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/628803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com