我一直在寻找一种方法来使用我能够使用的所有工具,并将自己伸展到我所处的位置之外。但是,尽管我已经阅读过有关代表的内容,但我找不到使用它们的地方(比如Interfaces,Generics和很多内容,但我离题了。)我希望有人可以告诉我他们何时以及如何使用代表在asp.net c#(2.0及以上版本)的 web 编程中。
谢谢你,如果Stack Overflow错了,请告诉我。
答案 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没有任何与代表相关的特殊内容(除了使用异步内容时的注意事项,这是一个完全不同的问题),所以我会指出其他问题:
答案 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)
只要您知道自己想要采取某些行动,就可以使用代理人,但该行动的细节将取决于具体情况。
除其他外,我们使用代表: