为什么 ref 和 out 不足以消除 C# 中重载的歧义?

2023-12-02

例如,为什么这个方法Max(ref int x, ref int y)不被认为是过载Max(int x, int y)?为什么与相同out?


这个问题预设了一个错误的前提。

 Max(int x, int y)
 Max(ref int x, ref int y) 
 Max(out int x, out int y)

都是名为的方法的重载Max。但是,请注意,任何给定的类定义中只能出现后两者之一。根据规范§3.6:

方法的签名由以下部分组成方法的名称、类型参数的数量和类型每个形式参数的种类(值、引用或输出),按从左到右的顺序考虑。出于这些目的,出现在形式参数类型中的方法的任何类型参数不是通过其名称来标识,而是通过其在方法的类型参数列表中的序号位置来标识。方法的签名具体不包括返回类型、params可以为最右边的参数指定修饰符,也可以为可选类型参数约束指定。

[...]

虽然out and ref参数修饰符被视为签名的一部分,在单一类型中声明的成员不能仅因签名而不同ref and out。如果两个成员以相同的类型声明,并且两个方法中的所有参数都具有相同的签名,则会发生编译时错误out修饰符更改为ref修饰符。出于签名匹配的其他目的(例如隐藏或覆盖),ref and out被视为签名的一部分并且彼此不匹配。 (此限制是为了允许 C# 程序轻松翻译为在公共语言基础结构 (CLI) 上运行,它不提供一种方法来定义仅在以下方面有所不同的方法:ref and out.)

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

为什么 ref 和 out 不足以消除 C# 中重载的歧义? 的相关文章

  • 使用inotify监控文件

    我正在使用 inotify 来监视本地文件 例如使用 root temp inotify add watch fd root temp mask 删除该文件后 程序将被阻止read fd buf bufSize 功能 即使我创建一个新的 r
  • .NET 进程分配的内存何时释放回 Windows

    设置 NET 在启动时以及在收集后尝试满足分配请求时 分段为每一代的堆 0 1 2 LOH 分配内存 以获得连续的内存块 为每个堆分配的内存可能会随着应用程序 预热 而趋于平稳 但第 2 代和大型对象堆可能除外 在垃圾收集期间 每个堆 0
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 将 Visual Studio 2012 C++ 单元测试项目链接到 exe 会导致访问冲突

    我从现有的整体 exe 本机 Visual Studio 2012 项目开始 我想添加一个本机单元测试项目 根据http msdn microsoft com en us library hh419385 aspx objectRef ht
  • WCF 版本控制枚举

    我开始编写一些需要向前兼容和版本控制的 WCF 数据协定 我一直在阅读 MSDN 文章here http msdn microsoft com en us library ms733832 aspx 并且想知道是否有人对有关枚举的第 14
  • 混合 VS2012 平台工具集

    我们正在从 VS2005 切换到 VS2012 update 2 我们正在构建大量 主要是控制台 本机 C 无 MFC ATL 可执行文件 它们使用几个常见的静态链接库 这些可执行文件主要在 Win7 计算机上运行 但有些也部署在较旧的 X
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

    我正在为我的 ASP NET 应用程序使用 DevTrends MvcDonutCaching 包 它工作得很好 我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存无效 这是我用于 VaryByCustom 设置的一些
  • 接口中的私有成员

    是否可以在 NET 接口中创建私有成员 我听说现在可以了 但我的 IDE 拒绝了 public interface IAnimal void SetDefaultName string name ChangeName name privat
  • 从 Linq 的列表中选择多个字段

    在 ASP NET C 中 我有一个结构 public struct Data public int item1 public int item2 public int category id public string category
  • System.Drawing.Icon 构造函数抛出“操作成功完成”异常

    在 Windows XP 计算机上 以下代码抛出 System ComponentModel Win32Exception 并显示消息 操作成功完成 System Drawing Icon icon new System Drawing I
  • 是否可以从.NET Core中间件检索控制器的操作结果?

    public class UsersController APIControllerBase public UsersController public Client Get return new Client ClientID 1 Las
  • 正则表达式基于组的不同替换?

    所以我对正则表达式比较陌生 并且做了一些练习 我正在玩一个简单的 混淆器 它只是寻找 dot or dot or at or at 不区分大小写 并且在匹配项之前或之后有或没有任意数量的空格 这是针对通常情况的 someemail AT d
  • 更改预处理到文件后出现错误 1 ​​错误 LNK1104

    我必须使用预处理器 所以我改变了 配置属性 gt C gt 预处理器 gt 预处理为文件 gt 是 并得到错误 错误 1 错误 LNK1104 无法打开文件 Debug asnreal obj 这个问题的解决办法 我必须在 lib 文件的路
  • C中的pipe()和fork()

    我需要创建两个子进程 一个子进程需要运行命令 ls al 并将其输出重定向到下一个子进程的输入 而下一个子进程又将对其输入数据运行命令 sort r n k 5 最后 父进程需要读取该数据 已排序的数据 并将其显示在终端中 终端中的最终结果
  • Python 中的 C 指针算术

    我正在尝试将一个简单的 C 程序转换为 Python 但由于我对 C 和 Python 都一无所知 这对我来说很困难 我被 C 指针困住了 有一个函数采用 unsigned long int 指针并将其值添加到 while 循环中的某些变量
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind
  • GetActiveObject() 与 GetObject() -- MK_E_UNAVAILABLE 错误

    All 我在将一些 VBA 代码转换为 C 时遇到一些问题 我们有一个充当本地 COM 服务器的第 3 方应用程序 在我们使用的VBA代码中获取对象 获取对现有对象的引用 e g Set appHandle GetObject ProgId

随机推荐

  • 如何运行所有 Ruby 脚本并出现警告?

    通过修改 Unix 或 Windows 环境变量 如何始终在默认情况下打开警告的情况下运行 Ruby 脚本 理想情况下 即使我间接运行脚本 例如通过 Rake 这也应该起作用 而不仅仅是直接运行脚本时 基于评论这个答案 The RUBYOP
  • 简单的“Hello World”风格的程序在执行开始后很快就会关闭

    我正在通过一本叫做 C 的书学习 C C 初学者指南第二版 当我运行可执行文件时 它会显示它半秒钟并关闭它 我在 Windows 8 1 上使用 Microsoft Visual Studio Express 2013 for Window
  • 如何在 XAML 中将 List 作为 ItemSource 绑定到 ListView?

    我正在学习 WPF 希望有一个类似于 LinkedList 的集合 以便我可以在其中添加和删除字符串 我想要一个ListView通过数据绑定监听该集合 我怎样才能将一个简单的列表集合绑定到ListView在 XAML 中 我的想法 不起作用
  • 从当前目录执行命令,不带点斜杠,如“./command”

    我觉得我错过了一些非常基本的东西 所以如果这个问题很迟钝 我很抱歉 自从我使用 bash shell 以来 我就一直在努力解决这个问题 假设我有这样的结构 bin command executable 这将执行 bin command 然后
  • 如何比较整数与整数数组

    我是安卓新手 我想知道如何比较整数和整数数组 有一组整数数组 Ex array int 1 2 3 4 和单个整数int i 2 这里我想比较这两个整数 如果单个整数出现在数组整数中 我想要打破这个过程 for i 0 i
  • 网格列数据在语义 UI 反应中重叠?

    https codesandbox io s m3ljr4zl8p example js 我没想到第 1 列数据会开始重叠到第 2 列数据中 而不是下降 因为它现在超出了网格列宽度 解决这个问题的办法是什么 列不重叠 是你的 p 元素比列占
  • Github Actions - 一个操作完成后触发另一个操作

    我有一个动作 ayaml文件 用于将 docker 映像部署到 Google Cloud Run 我希望收到告知构建和推送结果的 Slack 或电子邮件消息 构建操作完成后如何触发消息操作 是否可以获得构建操作的结果 有 2 个选项可以执行
  • 在 SAS 中按条件查找 2 个数据集之间的匹配项

    我正在尝试通过我的同学和我在使用 SAS 的编程课程中使用的 jsl 文件中现有的 for 循环来提高处理时间 我的问题 SAS 是否提供可以复制搜索和匹配条件的 PROC 或语句序列 或者一种浏览未排序文件而不逐行查找匹配条件的方法 我们
  • 在 PhantomJS 中评估似乎不起作用

    我对 JavaScript 魔法有疑问 当我执行这段代码时 var page require webpage create var url http google com page open url function status if s
  • 同一对象的哈希值不同,Swift,Hashable

    里面的Hashable我们可以看到 Hash values are not guaranteed to be equal across different executions of your program Do not save has
  • 从最后一行开始搜索 mysql 表

    所以 我知道关系数据库上不存在 最后一行 这样的东西 但我找不到更好的词来解释我想要做什么 我有一个如下所示的表 其中id is an AUTO INCREMENT场和time是当前的 Unix 时间戳 请注意 我可以为不同的行使用相同的时
  • Python 生成器表达式括号奇怪

    我想确定列表是否包含某个字符串 因此我使用生成器表达式 如下所示 g s for s in myList if s myString any g 当然我想内联它 所以我这样做 any s for s in myList if s myStr
  • Swift 上的常见 Equatable 类

    我需要容器Any Equatable中的项目NOT Generic类 例如故事板中初始的 UI 类 我需要这样 var items Equatable 但它不起作用 Equatable need Generic 不存在共性的问题Equata
  • Sharepoint 2013:通过 REST API 确保用户

    我正在尝试通过 REST API 自动确保某些用户 我的 REST 通话 ajax url blablabla api web ensureuser type POST data logonName i 3A0 23 w 7Cdomain
  • 从 WCF 服务公开枚举的 DescriptionAttribute

    如何使用 WCF 将服务中的枚举值中的描述属性暴露给客户端或 Web 引用 或者 如何使用 WCF 向客户端公开带有描述属性的枚举 虽然公开描述属性不公开 但客户端中仅公开枚举值 我想要枚举中描述属性的值 您不能强制执行此操作 mex WD
  • 如何在没有类的情况下生成对象的新实例?

    问题 如何从该类的实例生成该类的新实例 我发现了什么 考虑下一个类及其实例 Create a new class var Foo function Foo console log New instance of FOO Foo protot
  • 我可以隐藏控制器并查看名称 cake php 2 吗?

    我正在使用 cake php 由于某种原因我想从 url 中隐藏控制器和操作名称 当前网址我们喜欢 http 192 168 1 31 home this is test 其中 home 是控制器名称 this is test是动态的 sl
  • 进程卡在退出处,显示为僵尸但无法收获

    我有一个由其父级监控的进程 孩子遇到了一个错误 导致它调用abort 该进程不会篡改中止进程 因此它应该按预期进行 转储核心 终止 父级应该检测子级的终止并触发一系列事件来响应失败 子进程是多线程且复杂的 这是我看到的ps F UID PI
  • 查询失败错误:无法通过前缀查询视图。匹配视图的部分列表是

    我正在尝试查询具有多个表和等效视图的数据集 我试图使用 table suffix 仅查询表 但它返回错误 查询失败错误 无法通过前缀查询视图 匹配视图的部分列表 我无法从数据集中删除视图 有没有办法只查询表而忽略视图 SELECT COUN
  • 为什么 ref 和 out 不足以消除 C# 中重载的歧义?

    例如 为什么这个方法Max ref int x ref int y 不被认为是过载Max int x int y 为什么与相同out 这个问题预设了一个错误的前提 Max int x int y Max ref int x ref int