c#事件与委托

委托就是当方法不知道具体的实现并且不知道具体由哪个对象的方法来实现时,委托可以理解为独特的接口,就是只封装一个方法的接口。需要由别人来实现。

两者在功能上是一样的!

区别在于:
1.委托只是单一的方法,而接口可以封装多个方法
2.委托只约束方法的签名,而接口约束方法的名称

所以从多态的角度来将,委托可以认为是轻量级的接口。

最简单的例子1:

Array有一个Sort方法,如果要实现自定义排序,有两个重载:委托和接口

例子2

现在我要对一系列数据进行排序,而排序算法可能比较复杂,我不会自己写,我想调用Array.Sort方法,微软为我们提供了快速排序算法。
但是这里有一个问题——我要实现自定义排序规则,比如对于字符串,默认的是按字母顺序,但现在我想这样排序:

按字符串长度排序,只有当长度不同时,再按字母排序。

显然,微软不可能提供这样“个性”的排序方法,那是不是说,就必须让我们自己去写快速排序算法呢?
不需要!
我们只需要使用委托,就能实现这个要求:
string[]strs="I like C# very much".Split();
Array.Sort(strs,Rule);
int void Rule(string first,string second)
{
return first.Length==second.Length?first.CompareTo(second):first.Length.CompareTo(second.Length);
}

显然,我并不需要知道快速排序算法的逻辑,我只需要告之排序规则,就实现了我的个性排序。

试问:如果没有委托,你如何解决这个问题?     

http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1703763.html

posted @   老皮肉  阅读(139)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示