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

我一直在寻找一种方法来使用我能够使用的所有工具,并将自己伸展到我所处的位置之外。 但是,尽管我已经阅读过有关代表的内容,但我找不到使用它们的地方(比如Interfaces,Generics和很多东西,但我离题了。)我希望有人可以告诉我他们何时以及如何使用代表在asp.net c#(2.0及以上版)的网页编程中。

谢谢,如果Stack Overflow出错,请告诉我。

bdukes对事件是正确的。 但是,您不仅限于将代理人与事件一起使用。

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

需要记住的一件事:委托只是另一种类型,可以使用和传递类似于原始类型,如“int”。 就像“int”一样,委托有自己的特殊特性,当你使用委托类型时,你可以在编码中采取行动。

要获得关于这个主题以及其中一些更高级和更详细的方面的非常好的处理,请获取Joe Duffy的书, .NET Framework 2.0 。

好吧,每当你处理一个事件时,你都在使用一个代表。

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

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

编辑:我已将我在DB外部排序的原因添加到此处的相应问题中。

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

我头顶的另一个快速示例是使用Rhino Mocks进行unit testing。 你可以用Rhino Mocks做的很多事情都使用了委托和lambda表达式。

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) { ... } 

最近我使用代理“委派”权限的检查。

public Func CheckPermission;

这样,CheckPermission函数可以由各种控件或类共享,比如它在静态类或实用程序类中,并且仍然是集中管理的,也避免了界面爆炸; 只是一个想法

只要您知道要采取某些操作,就可以使用代理,但该操作的详细信息将取决于具体情况。

除其他外,我们使用代表:

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