委托和接口都允许类设计器分离类型声明和实现。给定的接口可由任何类或结构继承和实现;可以为任何类中的方法创建委托,前提是该方法符合委托的方法签名。接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?

在以下情况中使用委托:

当使用事件设计模式时。

当封装静态方法可取时。

当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。

需要方便的组合。

当类可能需要该方法的多个实现时。

在以下情况中使用接口:

当存在一组可能被调用的相关方法时。

当类只需要方法的单个实现时。

当使用接口的类想要将该接口强制转换为其他接口或类类型时。

当正在实现的方法链接到类的类型或标识时:例如比较方法。

使用单一方法接口而不使用委托的一个很好的示例是 IComparable 或 IComparable。IComparable 声明 CompareTo 方法,该方法返回一个整数,以指定相同类型的两个对象之间的小于、等于或大于关系。IComparable 可用作排序算法的基础,虽然将委托比较方法用作排序算法的基础是有效的,但是并不理想。因为进行比较的能力属于类,而比较算法不会在运行时改变,所以单一方法接口是理想的。

转载于:https://www.cnblogs.com/RuiLei/archive/2007/03/30/694324.html

何时使用委托而不使用接口相关推荐

  1. [转]何时使用委托而不使用接口(C# 编程指南)

    以下内容转自MSDN:http://msdn.microsoft.com/zh-cn/library/ms173173.aspx 委托和接口都允许类设计器分离类型声明和实现. 任何类或结构都能继承和实 ...

  2. 接口和抽象类分别在什么时候使用?和其中我对基本功能在不断变化为什么使用抽象类而不使用接口类的理解

    1.接口和抽象类分别在什么时候使用 2.对"如果基本功能在不断变化,那么就使用抽象类,如果使用接口,那么每次变更都需要相应的去改变实现该接口的所有类."这句话的理解 请耐心看完列子 ...

  3. 委托(C# 编程指南)

    委托(C# 编程指南) 委托是一种定义方法签名的类型.当实例化委托时,您可以将其实例与任何具有兼容签名的方法相关联.您可以通过委托实例调用方法. 委托用于将方法作为参数传递给其他方法.事件处理程序就是 ...

  4. 委托(一)-委托概诉

    委托 1.         什么是委托 委托是一种引用方法的类型, 一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的使用可以像其他任何方法一样,具有参数和返回值 , 其实委托类似与 ...

  5. C#委托与Lambda表达式

    C#委托与Lambda表达式 一.自定义委托 总结 1.委托必须先声明在使用: 2.委托使用必须实例化,在实例化后要把委托的方法名带入: 3.委托的调用必须与委托的方法参数一致: 二.泛型与多播委托 ...

  6. .NET工程师必须掌握的知识点

    以下内容是转载的 Microsoft SQL Server 数据库 一.创建和维护数据库 1.数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性.安全性.并发性? ...

  7. Net需要掌握的知识

    Net需要掌握的知识 一.C#开发 1.C#基础 变量定义 如何变量的初始化 变量的作用域 常量 字符串处理 使用正则表达式 什么是CTS类型?数据类型如何分类以及各个数据类型范围 类型的转化分类 显 ...

  8. 看陈广老师c#参考视频总结(第八篇)

    日期:<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> ...

  9. 接口包含内容概述2——委托与事件之惑

    前言: 上篇博文<接口包含内容概述1--接口相关概述及接口中属性的实现>最后留有一疑问:一个接口为什么可以包含一个事件,却不能包含一个委托呢? 在这里要想对这个问题解答,首先必须搞清楚委托 ...

最新文章

  1. 5分钟学会打游戏的活体人脑细胞,比 AI 学习速度更快
  2. 【图文】云栖大会深圳峰会:阿里云ET医疗大脑与工业大脑,机器学习平台PAI2.0...
  3. 网络推广中网络推广专员如何培养与搜索引擎的友好度和信任度
  4. MorGain2020中文版
  5. 整理:深度学习 vs 机器学习 vs 模式识别
  6. GRE难句典型结构2
  7. 1001 A+B Format (20 分)
  8. linux 下自动重启tomcat的脚本(支持shell杀进程)
  9. 鸿蒙系统-手机-JS FA(Feature Ability)调用Java PA(Particle Ability)
  10. 【Mac brew】代理安装brew insall
  11. LeetCode 11盛水最多的容器
  12. git log 日期格式
  13. 如何压缩ppt大小的方法不减画质?
  14. 优化计算机组策略,Windows 10神州网信版优化
  15. 弦截法 解高次方程 C语言/C++
  16. 商品详情页中特别注意的三件事
  17. 【RPA自动化】selenium教程_元素定位及表格读取
  18. python开发基础之数据类型、字符编码、文件操作
  19. JAVAWeb ——静态网页
  20. Android无障碍设计简介

热门文章

  1. Java面向对象进阶
  2. python将dataframe写入csv_Pandas dataframe数据写入文件和数据库
  3. python tcp服务器_python实现TCP服务器端与客户端的方法详解
  4. GPU Gems1 - 21 实时辉光(Real-Time Glow)
  5. linux集群管理权限,Linux下ACL权限管理
  6. 入门 | 初学者必读:解读14个深度学习关键词
  7. 李宏毅机器学习课程6~~~深度学习入门
  8. Calendar是日历类
  9. 关于RGBDSLAMV2学习、安装、调试过程
  10. bzoj4919 [Lydsy1706月赛]大根堆