繁体   English   中英

我什么时候在 asp.net 中使用委托?

[英]When would I use a delegate in asp.net?

我一直在寻找一种方法来使用我能使用的所有工具,并让自己超越我所处的位置。 但是,尽管我读过很多关于委托的内容,但我永远找不到使用它们的地方(比如接口、Generics 和很多东西,但我离题了。)我希望有人能告诉我他们何时以及如何使用委托在web编程 asp.net c#(2.0 及以上)。

谢谢,如果 Stack Overflow 有问题,请告诉我。

bdukes 对事件的看法是正确的。 但您不仅限于将委托与事件一起使用。

研究经典的观察者模式以获取更多关于使用委托的示例。 模式上的一些文本指向事件 model,但从原始学习的角度来看,您不必使用事件。

要记住的一件事:委托只是另一种可以使用和传递的类型,类似于您的原始类型,例如“int”。 就像“int”一样,委托具有自己的特殊特征,当您使用委托类型时,您可以在编码中对其进行操作。

要真正了解该主题以及其中一些更高级和详细的方面,请获取 Joe Duffy 的书.NET Framework 2.0

好吧,每当您处理事件时,您都在使用委托。

首先回答你的第二个问题,我认为这对 StackOverflow 来说是一个很好的问题!

第一个例子是排序。 List 上的 Sort() 方法需要一个委托来进行排序,Find() 方法也是如此。 我不太喜欢在数据库中进行排序,所以我喜欢在我的结果集上使用 Sort()。 毕竟,列表的顺序(通常)更多是 UI 问题,而不是业务规则问题。

编辑:我已将我在数据库之外排序的原因添加到此处的适当问题中。

编辑:排序例程中使用的比较 function 是一个委托。 因此,如果您使用 .Sort(Comparison(T)) 方法对 List 进行排序,则传递给排序 function 的 Comparison(T) 方法是一个委托。 请参阅 .Sort(Comparison(T))文档

我想到的另一个快速示例是使用 Rhino Mocks 进行单元测试。 你可以用 Rhino Mocks 做的很多事情都利用了委托和 lambda 表达式。

每当您知道要执行某些操作时,都可以使用委托,但该操作的详细信息将取决于具体情况。

除其他外,我们将委托用于:

  • 排序和过滤,特别是如果用户可以在不同的排序/过滤标准之间进行选择
  • 简化代码。 例如,一个较长的过程,开始和结束总是相同的,但中间有一点点不同。 我没有在中间有一个难以阅读的 if 块,而是为整个过程提供了一种方法,并为中间位传递了一个委托(Action)。
  • 我的表示层中有一个非常有用的 ToString 方法,它将任何东西的集合转换为逗号分隔的列表。 方法参数是一个 IEnumerable 和一个 Func 委托,用于将集合中的每个 T 转换为字符串。 它同样适用于按名字将用户串在一起或按 ID 列出项目。

asp.net 没有什么特别之处与代表相关(除了使用异步内容时的注意事项,这是一个完全不同的问题),所以我将向您指出其他问题:

委托用法:业务应用程序

我在哪里使用代表?

另一个例子是发布用户控件的事件。

例如。

// In your user control
public delegate void evtSomething(SomeData oYourData);
public event evtSomething OnSomething;

// In the page using your user control
ucYourUserControl.OnSomething += ucYourUserControl_OnSomething;

// Then implement the function
protected void ucYourUserControl_OnSelect(SomeData oYourData)
{
   ...
}

最近我使用代表来“委托”检查权限。

公共功能检查权限;

This way, the CheckPermission function can be shared by various controls or classes, say it in a static class or a utilities class, and still be managed centralized, avoiding also Interface explossion; 只是一个想法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM