泛型和从不同类调用重载方法 - 优先级问题[重复]

2023-12-30

首先,对这个标题感到抱歉,但我想不出更好的了......

我的问题可以通过简单的代码示例来呈现:

public static class Test<T>
{
    public static int GetInt(T source)
    {
        return Convert.ToInt32(source);
    }
}

public static class Convert
{
    public static int ToInt32(byte source)
    {
        return 30;
    }

    public static int ToInt32(object source)
    {
        return 10;
    }
}

为什么Console.WriteLine(Test<byte>.GetInt(20)); prints 10, 代替30?

我一直认为.NET 中的泛型是在运行时由 JIT 解析的。那么为什么抖动不够智能,无法发现存在ToInt32(byte)方法,适合我们的byte这里的参数类型?

这种行为使得Convert静态类方法调用会导致简单类型的装箱/拆箱操作。


编译器必须在编译时决定选择哪种方法。它不会发出任何代码来在运行时决定选择两个重载中的哪一个。因为您没有向 C# 编译器提供任何证据表明GetInt(T source)仅适用于byte结构,编译器必须选择其他重载。

或者让我换个角度来看:如果你删除ToInt32(object)过载,你的程序无法编译。

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

泛型和从不同类调用重载方法 - 优先级问题[重复] 的相关文章

  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 使用 apply 方法的泛型类型的 Scala 工厂?

    假设我有以下特征 它定义了一个接口并采用几个类型参数 trait Foo A B implementation details not important 我想使用伴随对象作为该特征的具体实现的工厂 我还想强制用户使用Foo接口而不是子类所
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 如何在 Qt 应用程序中通过终端命令运行分离的应用程序?

    我想使用命令 cd opencv opencv 3 0 0 alpha samples cpp cpp example facedetect lena jpg 在 Qt 应用程序中按钮的 clicked 方法上运行 OpenCV 示例代码
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • 使 Guid 属性成为线程安全的

    我的一个类有一个 Guid 类型的属性 该属性可以由多个线程同时读写 我的印象是对 Guid 的读取和写入不是原子的 因此我应该锁定它们 我选择这样做 public Guid TestKey get lock testKeyLock ret
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • String.Empty 与 "" [重复]

    这个问题在这里已经有答案了 可能的重复 String Empty 和 有什么区别 https stackoverflow com questions 151472 what is the difference between string
  • 将数组作为参数传递

    如果我们修改作为方法内参数传递的数组的内容 则修改是在参数的副本而不是原始参数上完成的 因此结果不可见 当我们调用具有引用类型参数的方法时 会发生什么过程 这是我想问的代码示例 using System namespace Value Re
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • git,本地分支上的更改会影响其他本地分支吗?

    我有一个主分支 现在为了测试其他东西 我做了一个分支 A 我签出分支 A 修改文件 当我再次签出 master 时 更改也在那里 在其他存储库上我有正确的行为 未提交的更改将从一个分支移动到另一个分支 为了使它们分开 您必须stash在移动
  • WPF MVVM 切换用户控件

    我是 MVVM 和 WPF 的新手 但我知道 MVVM 中发生了什么 我在主窗口中的用户控件之间切换时遇到问题 在我的应用程序中我有 MainWindow xaml 包含日志和 2 个链接 显示全部和新建 当然我有 ViewModel 我还
  • 查找 NxNxN 二进制数组中仅包含 1 的最大长方体

    给定一个 NxNxN 二进制数组 仅包含 0 或 1 我们如何通过非平凡的解决方案 即 O N 3 获得最大的长方体 这是同样的问题查找 N N 二进制矩阵中仅包含零的最大矩形 https stackoverflow com questio
  • jQuery $.ajax 响应为空,但仅在 Chrome 中

    我已经用尽了所有的研究途径来解决这个问题 所以希望其他人能想到我没有想到的东西 相对直接的设置 我有一个带有一些 javascript 的 html 页面 它向 URL 在同一域中 发出 ajax 请求 后台的 java web 应用程序执
  • java.lang.NoSuchMethodError:org.springframework.beans.factory.xml.XmlReaderContext.getResourceLoader()Lorg/springframework/core/

    我正在Tomcat7 JDK1 7 Maven和其他组件上开发Spring应用程序 最近 我对应用程序进行了重大更改 需要切换到 Spring 3 更改后 我在部署到开发服务器时看到以下异常 不过 该应用程序在我的本地系统上运行完美 jav
  • Aptana 插件使 Eclipse 崩溃

    我在 Ubuntu 11 04 笔记本电脑上使用 Eclipse EE Indigo 我使用Sun JDK 当我使用帮助 安装新软件安装 aptana 插件 然后通过粘贴安装 aptana 时 http download aptana co
  • 线程安全队列有问题吗?

    我正在尝试使用 C 中的 pthreads 编写线程安全队列 我的程序在 93 的情况下都能运行 另外 7 的时间它会吐出垃圾 或者似乎睡着了 我想知道我的队列中是否存在一些缺陷 上下文切换会破坏它 thread safe queue in
  • http 收到 304 但仍然下载内容

    我请求了一个html文件 我得到了http状态代码304 我知道这意味着内容没有被修改 所以浏览器可以使用缓存 但我注意到请求计时信息中内容下载用了 2 63 秒 我用 Chrome 开发工具进行了调试 既然浏览器有缓存 为什么它仍然下载内
  • s3直接上传限制文件大小和类型

    一个新手问题 但我用谷歌搜索了一下 似乎找不到任何解决方案 我希望允许用户直接将文件上传到 S3 而不是先通过我的服务器 通过这样做 有什么方法可以在实际上传到 S3 之前检查文件的大小限制和允许的类型吗 最好不要使用 flash 而使用
  • 将 Kafka 中的 Avro 转换为 Parquet 直接转入 S3

    我的 Kafka 主题以 Avro 格式存储 我想使用整个主题 在收到时不会更改任何消息 并将其转换为 Parquet 直接保存在 S3 上 我目前正在这样做 但它需要我一次使用来自 Kafka 的消息并在本地计算机上处 理 将它们转换为
  • 删除最后一次出现数值后的所有内容

    我需要删除最后一次出现数值后的所有内容 如下所示 1234D应该1234 ABCD1234A BC应该ABCD1234 这个方法应该可以为你做到 public string StripAfterLastNumber string s int
  • Android 中用于确认码的虚线输入字段

    我正在尝试为 android 布局中的数字创建一个虚线输入字段 例如 我可以在其中添加 4 个数字并将它们放入我的主要活动中 我进行了很多搜索 但没有找到更好的解决方案 使用这个库来实现您的目标 https github com gloma
  • 无法添加应用程序 ID,因为已超出“7”天内的“10”个应用程序 ID 限制[重复]

    这个问题在这里已经有答案了 I m getting this weird error when I try to hit this button to fix this error for the app I just made I am
  • 如何使用 Spring Data REST 更新 @ManyToOne 关系?

    我将 Spring Data REST 与 JPA 结合使用 我有一个 User 实体 它与另一个在单独的 RDBMS 表中建模的名为 AccountStatus 的实体具有多对一关系 JSON 表示如下所示 id 123 username
  • ModuleNotFoundError:没有名为“django”的模块

    我已经使用 django 在虚拟环境中构建了一个站点 并按照 AWS 文档中的步骤部署该站点 我已使用 Elastic Beanstalk 将我的网站部署到 AWS Web 服务器 并设置了运行 3 6 和 django 2 1 1 的 p
  • Domino 8.5.3 64 位中 HTTPJVMMaxHeapSize 的最佳设置

    我试图找到关于 Domino 8 5 3 FP4 64 位 Windows 中 JVM 堆大小的最佳设置的明确答案 我知道默认情况下它设置为1024M 一些网站建议建议使用 1G 1024M 但这是默认设置 所以就那么好了吗 其他网站称可用
  • 在 Android VideoView 上绘制叠加层(HUD)?

    我有一个绘制的自定义视图HUD 这是我的布局
  • 约束必须是字符串(或 null)

    我找不到错误来挽救我的生命 错误是 约束必须是字符串 或空 我不知道为什么它会给我这个错误 我必须错过一些简单的东西 我尝试添加 例如 dataPane new JPanel new GridBagLayout 到我所有的面板 什么也没有
  • Scala 中的阻塞关键字

    有什么区别Future blocking blockingCall and blocking Future blockingCall 这两个都定义在scala concurrent 我看过在 scala 文档中 http docs scal
  • 泛型和从不同类调用重载方法 - 优先级问题[重复]

    这个问题在这里已经有答案了 首先 对这个标题感到抱歉 但我想不出更好的了 我的问题可以通过简单的代码示例来呈现 public static class Test