方法名称是否隐式转换为委托类型?

2024-03-15

我在理解代表方面有点困难。

我有一个委托,当输入 y 字符时我将调用它:

public delegate void respondToY(string msgToSend);

        private respondToY yHandler;

我有一个订阅方法,以便调用代码可以在调用委托时要求收到通知:

public void Subscribe(respondToY methodName)
        {
            yHandler += methodName;
        }

据我所知,要向此委托注册,我需要提供 respondToY 类型的内容。然而,当调用 subscribe 方法时,我可以提供委托的新实例或仅提供方法的名称。这是否意味着可以使用与委托签名匹配的任何方法并将自动转换为正确的委托类型?

** 编辑 **

因此,在这种假设下,仅向按钮的单击事件处理程序等提供方法名称也是有效的(假设该方法采用发送者和相关事件对象),它将转换为所需的委托?


这是一个方法组转换。它将方法组(基本上是方法或重载方法的名称)转换为具有兼容签名的委托类型的实例。

是的,可以使用任何兼容的方法。请注意,您也可以提供目标 - 例如:

string text = "Hello there";
Func<int, int, string> func = text.Substring;

Console.WriteLine(func(2, 3)); // Prints "llo", which is text.Substring(2, 3)

There must但涉及特定的委托类型。你不能只使用:

Delegate x = methodName;

...编译器不知道要创建哪种委托。

有关更多信息,请参阅 C# 4 语言规范的第 6.6 节。

注意方法组转换always创建相关委托的新实例 - 它不会被缓存(并且不能在不违反规范的情况下缓存。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方法名称是否隐式转换为委托类型? 的相关文章

  • 将 Stream 反序列化为 List 或任何其他类型

    尝试将流反序列化为List
  • C# 创建函数队列

    我写了一个名为 QueueManager 的类 class QueueManager Queue functionsQueue public bool IsEmpty get if functionsQueue Count 0 return
  • 获取 std::variant 当前持有的 typeid(如 boost::variant type())

    我已经从 boost variant 迁移到 std variant 但遇到了障碍 我在 boost type 中使用了一个很好的函数 它可以让你获取当前持有的 typeid 看https www boost org doc libs 1
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 序列化和反序列化 Visual Studio 解决方案文件 - 或以编程方式编辑?

    我想以编程方式添加和删除项目 解决方案文件夹和其他项目 例如解决方案的资源文件 但我不确定最好的方法是什么 对于那些不知道的人 高度简化 解决方案文件 sln 通常如下所示 Microsoft Visual Studio Solution
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 指向字节数组的指针

    由于 Misra C 的要求 我的一位同事想要使用指针声明 但我遇到了一些问题 Misra 安全关键指南 不会让我们纯粹的程序员使用指针 但会让我们对数组字节进行操作 他打算获取一个指向字节数组的指针 因此我们不会在堆栈上传递实际的数组 T
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • 以编程方式更新 ClickOnce 应用程序的部署清单会导致缺少 4.0 中所需的 <兼容框架> 元素

    我正在致力于自动化 NET 4 0 ClickOnce WPF 应用程序的安装程序 该应用程序需要在应用程序配置文件 我经历了寻找必须遵循的具体步骤的棘手过程Mage exe http msdn microsoft com en us li
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代

随机推荐

  • GCDAsyncSocket“didReadDataWithTag”从未使用 NSOperation 子类调用

    在某些 XIB 文件的 getMyFile 方法中 我正在创建一个 A 类 NSOperation 的子类 的对象并将其添加到 myFileQueue NSOperationQueue 的对象 中 myFileQueue MaxConcur
  • 用Lua检查文件是否存在

    如何使用Lua检查文件是否存在 Try function file exists name local f io open name r if f nil then io close f return true else return fa
  • 根据特定条件将内容从 list1 复制到 list2

    如果我有两个如此定义的泛型列表 type pMyList record a b integer c string end TMyList TList
  • Delphi thiscall 调用约定

    我需要调用非静态 C 成员函数 因此我需要使用thiscall调用约定 Delphi 不支持这种调用约定 因此 在调用任何成员函数之前 我必须手动将参数推送到堆栈中 asm mov ecx myClassPointer end 这工作正常
  • 为什么 getStringExtra 没有给出正确的输出?

    我试图将一些字符串从一个意图传递到另一个意图 但 adt 说 键文本需要字符串 但值是 android text SpannableString 返回默认值 但我使用字符串作为键 而不是它声称的那样 这是我的第一个活动的代码 private
  • 避免导入“sys.path.append(..)”

    这不是我第一次畏缩imports在Python中 但我想这是一个有趣的用例 所以我想在这里询问它以获得更好的见解 我的项目结构如下 sample project src init py module1 init py utils py mo
  • 如何在页面刷新/加载时刷新验证码图像?

    我想强制我的网站在每次加载时刷新验证码图像 因此我有一个由 onload 事件触发的 javascript 方法 这里我有以下行 document getElementById yw0 button click Firebug 没有检测到任
  • 高效地按行应用函数

    我有一个包含多个列的数据框 其中包含一个诊断的信息 条目是TRUE FALSE or NA 我创建了一个向量 将这些列总结如下 如果患者在某个时间被诊断出来 TRUE then TRUE 如果唯一有效的条目是FALSE then FALSE
  • 如何在SWI-Prolog中启用所有统一中的发生检查?

    根据维基百科 https en wikipedia org wiki Occurs check 为所有统一提供声音统一的实现是 Qu Prolog 和 Strawberry Prolog 以及 可选地 通过运行时标志 XSB SWI Pro
  • 如何使我的 SVG 移动设备具有响应能力

    我想为网站制作 svg 动画 但 svg 不支持移动响应 它延伸出背景 从而使网站的宽度超出了我的预期 我认为很可能我在视口或宽度和高度上做错了什么 但我不知道哪里出了问题 此外 当我将 chrome 浏览器最小化到移动屏幕宽度尺寸时 它在
  • 所需的 Bluemix Analytics for Apache Spark 日志文件信息

    我在调试我的 Spark 笔记本时想要更多信息 我找到了一些日志文件 ls HOME notebook logs 这些文件是 bootstrap nnnnnnnn nnnnnn log jupyter nnnnnnnn nnnnnn log
  • 矩阵到欧拉角

    我正在尝试从旋转矩阵中提取欧拉角 我的约定 矩阵列主 坐标系右手 正角右手 旋转顺序 YXZ 首先是航向 然后是姿态 然后是倾斜 我发现了这个 但无法使用它 因为它们使用其他轴顺序 http www euclideanspace com m
  • 我应该使用 Eclipse 插件(或 OSGi Bundles)作为普通的依赖管理工具吗?

    它再次发生了 我加入了一个新项目 该项目由几个具有相互依赖性的普通 Eclipse Java 项目组成 所有项目都通过项目构建路径进行管理 我发现这一切有点混乱 当谈到运行配置时 你就进入了地狱 过去 我一直坚持创建插件项目 而不是普通的
  • 在 Vuejs 中使用 mixins

    我目前正在学习如何使用 Vuejs 开发应用程序 我有一个 main js 文件 其中包含用于设置 Vue js 的代码 我使用新文件 api js 创建了一个新目录 mixins 我想将其用作 mixin 以便每个组件都可以使用函数来访问
  • 为什么 git 一直告诉我它是“在后台自动打包存储库以获得最佳性能”?

    Note I don t认为这是重复的这个问题 https stackoverflow com questions 8633981 what does auto packing the repository for optimum perf
  • 如何使用反射(镜像)来访问 Dart 类中的方法名称?

    我需要 获取 Dart 类中的方法 我怎样才能做到这一点 我希望能够调用这些方法 我可以看一个例子吗 这是一个简单的可复制粘贴代码示例 import dart mirrors import dart io main var im refle
  • 使用 ajax 时 csrf 令牌无效

    我开始学习NodeJs在我对 js 的了解的推动下 我开始编写一些代码来创建用户注册逻辑 基本上我已经配置了ExpressJS通过以下方式 const express require express const app express co
  • 无法重新绑定滚动事件?

    我想在ajax调用中重新绑定窗口滚动事件 window scroll function column height first column height screenTop window scrollTop window height w
  • Python正则表达式不匹配

    这是我确信我错过了一些简单内容的事情之一 但是 在下面的示例程序中 我尝试使用 Python 的 RE 库来解析字符串 line 以获取浮点百分号之前的数字 即 90 31 但代码总是打印 不匹配 我也尝试了其他几个正则表达式 所有结果都相
  • 方法名称是否隐式转换为委托类型?

    我在理解代表方面有点困难 我有一个委托 当输入 y 字符时我将调用它 public delegate void respondToY string msgToSend private respondToY yHandler 我有一个订阅方法