在 OOP 中,什么是转发?它与委托有何不同?

2023-12-29

有人可以解释一下转发和委托之间的区别吗?它们看起来很相似,但我一直无法找到转发的良好定义,所以我不确定我是否真的理解。


我们首先定义两个术语:

  • sender : the object that sends a message/task to another object(the receiver)
  • receiver: the object that receives a message/task from the sender

和...之间的不同转发 and 代表团是在转发 the receiver acts in its own context而在代表团 the receiver acts on the behalf of the sender.

这是一个很好的比喻博客文章 http://raganwald.com/2014/04/10/mixins-forwarding-delegation.html:

委托和转发非常相似。一个可能有助于区分它们的比喻是,想象一下收到一封电子邮件,要求您向有价值的慈善机构捐款一些钱。

  • If you forward给朋友发邮件,朋友捐钱,朋友是捐出自己的钱并获得自己的税单。
  • If you delegate回复你的会计师,会计师捐出你的钱交给慈善机构,您就会收到税单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 OOP 中,什么是转发?它与委托有何不同? 的相关文章

  • 检查数据库中是否存在记录

    我正在使用这些代码行来检查记录是否存在 SqlCommand check User Name new SqlCommand SELECT FROM Table WHERE user txtBox UserName Text conn int
  • 为什么在排序输入上插入到树中比随机输入更快?

    现在我一直听说从随机选择的数据构建二叉搜索树比有序数据更快 这仅仅是因为有序数据需要显式重新平衡以将树高度保持在最低限度 最近我实现了一个不可变的treap http en wikipedia org wiki Treap 一种特殊的二叉搜
  • 快速 log2(float x) 实现 C++

    我需要在 C 中非常快速地实现 log2 float x 函数 我发现了一个非常有趣的实现 而且速度非常快 include
  • Xamarin 测试记录器选项有错误。无法记录自动化测试

    选项 gt Xamarin gt Xamarin Test Recorder 中的所有设置都有错误 我的桌面上安装了 Visual Studio 2015 企业版 以及 Xamarin 和 Xamarin Test Recorder 插件
  • 如何将动态数据写入 MVC 3 Razor 中的页面布局?

    我有带有 Razor 引擎的 MVC 3 C 项目 将动态数据写入 Layout cshtml 的方法和最佳实践是什么 例如 也许我想在网站的右上角显示用户名 该名称来自会话 数据库或基于用户登录的任何内容 更新 我也在寻找将某些数据渲染到
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • 为基于架构的 XML 文件创建 WPF 编辑器

    这是场景 我们的服务器产品之一使用大型 XML 配置文件 该文件的布局相当好 并且针对 XSD 文件进行了验证 现在是时候构建一个配置 GUI 来维护这个文件了 我想深入研究 WPF 来完成它 我可以为每个配置部分布置一个单独的表单 每次向
  • C# 中输入按键

    我尝试了这段代码 private void textBox1 KeyPress object sender KeyPressEventArgs e if Convert ToInt32 e KeyChar 13 MessageBox Sho
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • C++ 中可以使用匿名类作为返回类型吗?

    有没有办法在 C 中使用匿名类作为返回类型 我用谷歌搜索这可能有效 struct Test fun 但是这段代码无法编译 错误信息是 新类型不能在返回类型中定义 其实代码没有任何意义 我只是想弄清楚匿名类是否可以用作C 中的返回类型 这是我
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • 如何在控制器中使用多个 DBContext

    如何在控制器中使用多个 DBContext 我尝试以不同的方式重载构造函数 一些控制器 public C1 DBContext1 a DBContext2 b DBContext3 c public C1 DBContext1 a publ
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • 代码块 - 使用大地址感知标志进行编译

    如何使用以下命令在 64 位系统上编译 32 位应用程序LARGE ADRESS AWARE使用代码块标记 我需要使用超过 2GB 的内存 应该是添加的情况 Wl large address aware到链接标志 我不使用 CodeBloc
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne
  • C# 从今天起 30 天

    我需要我的应用程序从今天起 30 天后过期 我会将当前日期存储在应用程序配置中 如何检查应用程序是否已过期 我不介意用户是否将时钟调回来并且应用程序可以正常工作 用户太愚蠢而不会这样做 if appmode Trial string dat
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • 为什么 getch 不可移植?

    是什么使得 getch 本质上无法作为标准 C 函数包含在内 对于控制台界面来说 它是如此直观和优雅 如果没有它 要求输入单个字符总是会产生误导 因为用户可以输入多个键 更糟糕的是 您经常需要确保在读取控制台输入后清除标准输入 这甚至不是作
  • 如何在c#中获取斐波那契数

    伙计们 我有一个关于斐波那契的问题 如何获得斐波那契数列 该数字也将以用户输入结束 例如 如果我输入 21 则输出必须为 0 1 1 2 3 5 8 13 21 这是我的代码 static void Main string args int

随机推荐

  • Django Rest框架仅创建序列化器字段

    我有一个用作请求描述的 Django 模型 它是为了由 REST 客户端发出请求而创建的 用于记录任务的当前状态 并记录客户端收到的历史请求 该模型有一些字段用于微调和控制所请求的任务 例如 目标对象和操作类型 显然 我希望客户端在对象创建
  • 下载属性在 Phonegap 应用程序中不起作用

    这不是我的第一个混合应用程序 我已经在 Google Play 商店和 Apple Store 上发布了应用程序 我的目标平台是Android 我不确定将支持哪些版本 如果我决定发布这个想法 我将在稍后确定 我正在使用 Phonegap B
  • SQL Server计算父类别和所有子类别的记录数

    目前 我有一个存储过程 我在其中创建一个表并查询该表以获得所需的结果 结果是一个无限分层的子 父表 它允许我在基于 ASP Classic 的网页上显示数据 这个程序是 SET NOCOUNT ON DECLARE Categories T
  • 有哪些技术可以监控一个软件的多个实例?

    我有一个自助服务亭软件 将在多个站点运行 我想远程监控他们的状态 信息亭应用程序本身已经基本完成 我现在正在创建一款软件 该软件将从一个中心位置监控所有自助服务终端 以便客户可以远程查看特定详细信息 例如 接受者的现金盒中有多少钞票 当前的
  • eclipse/tomcat:部署不再工作(ClassNotFoundException)

    我正在 Linux Ubuntu Natty Narwhal 中运行 Eclipse Helios Service Release 1 和 Tomcat 7 0 12 我一直很高兴地重新部署我的网络应用程序 直到它毫无理由地停止工作 显示以
  • 无法在另一个 *.axml 文件中包含 *.axml 文件

    我想包括一个布局 axml文件在另一个 axml使用 xamarin android 但是 当我使用时
  • 使用 actionbarsherlock 选项卡样式的选项卡内容

    参考下面的代码 取自https gist github com 1126843 https gist github com 1126843 如何设置选项卡的内容 public class NativeTabActivity extends
  • 如何使用 Spring JDBCTemplate 绑定元组列表?

    我有一些这样的疑问 List listOfIntegers Arrays asList new Integer 1 2 3 List objects namedParameterJdbcTemplate query select from
  • 自定义搜索 jQuery FancyTree 插件

    我在我的一个项目中使用 FancyTree jQuery 插件 https github com mar10 fancytree https github com mar10 fancytree 该插件还有一个过滤器扩展 可以调暗或隐藏不匹
  • 在列表中查找匹配和不匹配的项目

    我对 Python 还很陌生 对于列表可以做什么和不能做什么有点困惑 我有两个列表 我想比较它们并以二进制格式返回匹配和不匹配的元素 List1的长度是恒定的 而长度List2不同 但总是短于List1 例如 List1 dog cat p
  • 检测 IE 操作中止问题的原因

    我的网站正遭受操作中止错误 http support microsoft com kb 927917 我觉得奇怪的是 就我而言 错误只是有时会发生 该网站已经运行良好三个月了 然后今天开始出现这种情况 但并非每次都会出现这种情况 发生这种情
  • 未定义方法“has_one_attached” - Spree、AWS S3、产品图像、Rails

    我尝试将 Spree 购物车与 AWS S3 连接以上传产品图片 但不断收到错误消息 rbenv versions 2 4 0 lib ruby gems 2 4 0 gems activerecord 5 2 0 lib active r
  • 生成一个新线程来打开一个新窗口并从另一个线程关闭它

    现在我有 C 代码在不同的线程中生成一个新窗口 这可以工作 但是一旦新生成的窗口打开 它就会关闭并且线程结束 我该如何做到这一点 以便可以从第一个线程关闭新生成的窗口 这是当前生成如何工作的 树 主线程 使用主线程中的一个函数来启动单独线程
  • Mat扩展面板默认打开的bug?

    自从 Angular 5 发布以来 我的垫子扩展面板出现了一些问题 它们是默认打开的 我不明白为什么 my html div div
  • 有没有一个脚本可以列出我创建的 git 分支?

    我知道分支并不真正存储创建者信息 它们只是指向提交的指针 我的目标是能够清理已合并回主分支的旧分支 并列出尚未完成此操作的分支 清理 这与 查找未合并的分支 不同 因为我也想查找合并的分支 并且我想由作者来完成 我的问题是 有没有一个脚本可
  • phpmyadmin - 错误 2002 - 在 Mac 上

    我目前使用的是Mac 运行的操作系统版本是El Capitan 网络根目录是 Users username Sites 我下载并解压了 phpmyadmin 并将目录移动到根文件夹 然后我成功进入了登录屏幕 但是当我尝试登录时 它显示这样的
  • 在运行时加载类时无法创建 bean

    我有两个工作方式不同的项目 第一个用于类加载 第二个有其类用于执行一些处理工作 在第一个项目中 我加载该类 而不是创建新实例来调用该方法 我仅使用应用程序上下文 Autowired ApplicationContext context Cl
  • DSN 连接和带有 @ 的密码

    我考虑切换到使用 DSN 连接的数据库访问库 connect mysql login password database options DSN 使用 作为分隔符 这是否意味着密码不能包含 符号 还有其他限制吗 任何特殊字符对于 DSN 来
  • UIToolbar 的颜色没有改变

    我创建了一个 UIToolbar 我正在尝试使用以下方法将其变为黑色 toolbar barStyle UIBarStyleBlackOpaque or 工具栏background财产 但在任何一种情况下其颜色都不会改变 我怎样才能改变它
  • 在 OOP 中,什么是转发?它与委托有何不同?

    有人可以解释一下转发和委托之间的区别吗 它们看起来很相似 但我一直无法找到转发的良好定义 所以我不确定我是否真的理解 我们首先定义两个术语 sender the object that sends a message task to ano