Geo*_*ker 5 .net c# asp.net delegates
鉴于"大多数"开发人员是业务应用程序开发人员,我们最喜欢的编程语言的功能用于我们正在使用它们的上下文中.
作为C#/ ASP.NET应用程序开发人员,我倾向于在处理UI事件时仅使用委托.事实上(这是我缺乏经验的一部分),我甚至不知道除了使用代表的事件之外的良好背景! 这非常可怕; 但我正在收集同一条船上还有其他开发商.
注意:答案应该与.NET 2.0有关..NET 3.0将代理完全带到了不同的级别,这可能是一个单独的问题.
除了事件之外,委托有多大用处,以及哪些业务应用程序上下文最有用?
更新:Jarrod Dixon 有助于链接到有关委托使用情况的MSDN文档,我必须承认我最喜欢的设计模式书根本没有提出代理,所以除了UI事件之外我还没有真正看到它们的使用.要扩展这个问题(只是一点点!),您可以为业务应用程序(或者实际上,任何必须处理相关问题的应用程序)提供哪些示例,以便更容易地消化有关该主题的MSDN文档?
我认为这个问题反映了剥猫皮的多种方法。我发现委托(和 lambda)几乎与“for”循环一样基本。
这是我最近使用委托的一个上下文(出于演示目的更改了格式和名称:)
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();
}
Run Code Online (Sandbox Code Playgroud)
因此,这根据某些标准对一组项目进行排序,然后它要么返回排序后的整个列表,要么将其分成两部分,分别对两半进行排序,并在它们之间放置一个分隔符。如果您无法表达“一种对某些内容进行排序的方法”的概念(这就是委托的用途),那么祝您好运。
编辑:我猜 Concat 和 OrderBy 是 3.0 特定的,但这仍然是基本思想。