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

时间:2009-03-11 15:21:52

标签: c# asp.net delegates

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

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

8 个答案:

答案 0 :(得分:7)

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

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

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

为了更好地处理这个主题以及其中一些更高级和更详细的方面,请获取Joe Duffy的书.NET Framework 2.0

答案 1 :(得分:6)

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

答案 2 :(得分:3)

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

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

编辑:我已将我在数据库外排序的原因添加到相应的问题here

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

答案 3 :(得分:2)

我头顶的另一个简单例子是使用Rhino Mocks进行单元测试。你可以用Rhino Mocks做的很多事情都使用了委托和lambda表达式。

答案 4 :(得分:1)

asp.net没有任何与代表相关的特殊内容(除了使用异步内容时的注意事项,这是一个完全不同的问题),所以我会指出其他问题:

Delegate Usage : Business Applications

Where do I use delegates?

答案 5 :(得分:1)

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

例如

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

答案 6 :(得分:1)

最近我使用委托“委派”权限检查。

public Func CheckPermission;

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

答案 7 :(得分:1)

只要您知道自己想要采取某些行动,就可以使用代理人,但该行动的细节将取决于具体情况。

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

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