何时使用Delegate,何时使用Interface
委托和接口的相似点
委托和接口都允许类的设计者将声明和实现分离开来,一个给定的接口可以被任何类或结构体继承和实现;也可以为任何类的方法创建对应的委托,只要该方法满足委托的签名,委托和接口可以被一个对象使用,这个对象不必关心实现委托和接口的细节,有了这些相似点,我么什么时候使用委托?什么时候使用接口呢?
使用委托的情况
- 使用了基于事件的设计模式
- 封装静态方法
- 调用者无需访问实现方法的对象的其他内容,比如属性,方法或接口
- 简单的组合
- 一个类想要方法的多种实现
使用接口的情况
- 一组相关的方法需要被调用
- 只需要方法的一种实现
- 需要将接口转换为其他接口或类
- 被实现的方法链接到类中的某个类型,比如comparison方法
有一个使用只包含单个方法的接口而不是委托的好例子,那就是IComparable或声明了CompareTo方法的IComparable.IComparable,该方法返回一个整型值来表示两个同类型对象间的关系,大于,等于或者是小于。IComparable可以用作排序算法的基本比较函数,当然使用委托也可以,但是并不理想,因为比较的实现取决于类,并且比较算法运行时并不改变,一个单方法的接口就很理想。
original http://msdn.microsoft.com/en-us/library/ms173173%28v=vs.80%29.aspx
作者:zdd
出处:http://www.cnblogs.com/graphics/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
分类:
杂
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2010-02-21 Shortcuts