为什么 C# 在这种情况下无法解决正确的重载问题?

2024-04-23

我遇到过一种明确的奇怪情况,但重载解析器并不这么认为。考虑:

public static class Program
{
    delegate int IntDel();
    delegate string StringDel();

    delegate void ParamIntDel(int x);
    delegate void ParamStringDel(string x);

    static void Test(IntDel fun) { }
    static void Test(StringDel fun) { }
    static void ParamTest(ParamIntDel fun) { }
    static void ParamTest(ParamStringDel fun) { }

    static int X() { return 42; }
    static void PX(int x) { }

    public static void Main(string[] args)
    {
        ParamTest(PX); // OK
        Test(X); // Ambiguos call!
    }
}

怎么打来电话ParamTest重载已正确解决,但是Test过载是不明确的?


也许是因为https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx https://msdn.microsoft.com/en-us/library/aa691131%28v=vs.71%29.aspx

具体来说,方法的签名不包括返回类型,也不包括可能为最右边的参数指定的 params 修饰符。

和之间唯一的区别IntDel and StringDel是在返回值中。

进一步来说:https://msdn.microsoft.com/en-us/library/ms173171.aspx https://msdn.microsoft.com/en-us/library/ms173171.aspx

在方法重载的上下文中,方法的签名不包括返回值。但在委托上下文中,签名确实包含返回值。换句话说,方法必须具有与委托相同的返回类型。

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

为什么 C# 在这种情况下无法解决正确的重载问题? 的相关文章

随机推荐

  • 使用列表中的项目更改嵌套字典的字典中的值?

    如何根据列表的值修改 创建嵌套字典的字典中的键 值 其中列表的最后一项是字典的值 其余项冷藏到字典中的键 这将是列表 list adddress key1 key1 2 key1 2 1 value 这只会在解析命令行参数等情况下出现问题
  • 加载 DOM 后如何运行 jQuery 的后备副本?

    以下是a中的第一行代码
  • Struts2 瓷砖 org.apache.tiles.extras.complete.CompleteAutoloadTilesListener 集成错误

    我正在关注这里发布的答案 使用 struts2 tiles plugin 在图块定义中使用 OGNL 和通配符 https stackoverflow com questions 10050433 ognl and wildcards wo
  • 文本段的名称从何而来?

    传统的汇编器和更高级别的编译器使用多个内存segments 根据预期用途 因此 有数据段 堆栈段 bss 和文本段 文本段也称为代码段 Text部分 为了机器码 我问过所有我能找到的老前辈 像机器代码这样难以阅读的东西是如何被称为 文本段
  • Javascript:setTimeout() - 需要帮助

    我目前正在网页上执行突出显示功能 并为此使用 jquery 插件 我的代码如下所示 var input function var matchword searchbox val if matchword body removeHighlig
  • 当同时按下两个按钮时

    我有一个小问题 我有一个表单 这是我的登录表单 然后我还有另一个表单 这是我的添加用户表单 当我单击登录表单的登录按钮时 它需要检查是否同时按住了 Shift 和 Control 键 如果两者均未按下 则不应打开添加用户表单 但如果它们都被
  • C++ UDP Socket端口复用

    如何在 C 中创建客户端 UDP 套接字 以便它可以侦听另一个应用程序正在侦听的端口 换句话说 如何在 C 中应用端口复用 我只想监听一个端口 您可以使用嗅探器来做到这一点 只需忽略来自不同端口的数据包即可 我可能需要阻止它发送一些特定的数
  • Powershell:如何将字节字符串与二进制注册表值进行比较

    我有一个二进制注册表值 我想检查它在 Powershell 脚本中的一致性 我通过以下方式检索值 Get ItemProperty Path HKLM Software ORL WinVNC3 Name ACL ACL 这将返回一个字节字符
  • 使用 AngularJS 将选择重置为默认值

    我有一个关于 AngularJS 的问题 我有一个 使用 ngOptions 创建的选项进行选择 我想要 将所选选项设置回默认选项 我尝试过了 删除模型变量 例如 if angular isDefined scope first delet
  • 如何在视图中加载部分视图?

    我对这种片面的观点感到非常困惑 我想在我的主视图中加载部分视图 这是一个简单的例子 我正在加载 Homecontroller Index 操作的 Index cshtml 作为主页 在index cshtml中 我通过创建一个链接 Html
  • 如何更改 Composer 中一个包的最低稳定性 [重复]

    这个问题在这里已经有答案了 我正在尝试合并LDAP 验证 https github com ccovey ldap auth通过 Composer 模块到我的 Laravel 项目中 然而 它仅适用于dev稳定版本 我当前的 Compose
  • 如何使用 AngularJS 显示和隐藏 div?不使用任何 css 或 jquery

    我想使用 angularJS 隐藏 div 并在单击按钮时显示它 我使用了 ng show 和 ng hide 但它不起作用 div div
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • Flask Python 未加载 main.css

    文件结构如下 app py 和 app2 py 几乎相同 只是 app2 py 指向 templates 文件夹 因为 app2 py 位于 src 文件夹中 app py app2 py 通过 app py 加载时 一切运行正常并且找到了
  • ReferenceError:CKEDITOR 未定义

    我正在尝试使用CK编辑器 http ckeditor com 但是当我尝试时出现以下错误 在 JS 控制台中 例子 http docs ckeditor com guide dev framed从教程中 浏览器中仅显示一个文本框 Refer
  • 独立Python3脚本之间的进程间通信

    我们可以使用标准的 multiprocessing Queue 类在独立的 Python3 脚本之间进行通信吗 bash aaa py bash bbb py 如果没有 是否有另一个库 例如标准多处理模块 用于与独立脚本进行通信 看一下有关
  • Webpack 中的 /node_modules/watchpack 中出现“无法解析模块 'aws-sdk'、'child_process'、'net'”

    我正在尝试构建我的 prod webpack 文件并收到 5 10 个 无法解析模块 aws sdk child process 的错误 所有这些错误都以相同的路径开始 ERROR in webpack watchpack chokidar
  • 如何在对象字段值发生变化时定义断点?

    作为示例 给出下面的代码摘录 我想定义一个断点 每当对象字段值发生变化时就会触发断点 并且可以选择根据条件中断 False or True在这种情况下 type TForm1 class TForm EnableButton TButton
  • 一个表列可用于多个 fk 表?

    对于这种情况 最好的解决方案 做法是什么 我有一个表 可以引用多个表 对象 以下是 UserCalendar 表的示例 这是一个用户保存事件的表 但系统也从后面插入到该表中 用户执行一些有截止日期的服务 这些服务也被插入到该表中 问题是没有
  • 为什么 C# 在这种情况下无法解决正确的重载问题?

    我遇到过一种明确的奇怪情况 但重载解析器并不这么认为 考虑 public static class Program delegate int IntDel delegate string StringDel delegate void Pa