C# 会内联在接口中声明的方法吗?

2024-02-22

如果我有一个界面:

 interface IMyInterface
 {
    void DoSomething();
 }

和一个实现类:

 class MyClass : IMyInterface
 {
     public void DoSomething()
     {

     }
 }

DoSomething 是内联的候选者吗?我期望“否”,因为如果它是一个接口,那么该对象可能会被转换为 IMyInterface,因此被调用的实际方法是未知的。但事实上,它没有标记为 virtual 意味着它可能不在 vtable 上,所以如果该对象被强制转换为 MyClass,那么也许它可以被内联?


如果你打电话DoSomething那么它将直接成为内联的候选者(取决于该方法是否满足与大小等相关的其他内联标准)。

如果你打电话DoSomething通过接口,那么它将不会被内联。接口提供的间接寻址会导致虚拟调用需要 vtable 查找,因此 JIT 编译器无法内联它,因为实际的调用点仅在运行时解析。

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

C# 会内联在接口中声明的方法吗? 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 自动映射器多对多 stackoverflowException

    我遇到以下映射的堆栈溢出 Mapper CreateMap
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 如何将 Q 格式整数转换为浮点数(反之亦然)?

    我四处搜寻 找不到一个很好的问题来回答这个问题 给定一个整数 使用Q Format https en wikipedia org wiki Q number format 如何将该数字转换为普通浮点类型 反之亦然 如何将浮点类型转换为Q F
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • 处理“未找到细胞”。 Excel 中的错误

    我正在使用 Excel VSTO 应用程序并使用以下代码在工作表中查找错误单元格 Excel Range rngTemp Excel Range rngErrorRange Excel Worksheet Sheet1 Excel Work
  • 如何在 C# 中更改公共 IP 地址

    我正在创建一个 C winform 应用程序 我想在其中更改公共 IP 地址 而不是像 Hotspot Shield ZenMate OpenVPN 等那样更改 IPv4 地址 我已经检查了以下链接 但没有找到足够的帮助 所以我发布了这个问
  • valgrind 在 Raspberry Pi 上返回未处理的指令

    我最近一直在尝试在运行 Debian GNU Linux7 0 喘息 的树莓派 型号 b 上使用 valgrind 来调试分段错误 每次我在编译的 C 程序上运行 valgrind 时 都会得到类似以下内容的信息 disInstr arm
  • 如何检测应用程序正在运行的 .NET 版本?

    我尝试使用Environment Version ToString 确定目标计算机上正在使用什么 NET 框架 但安装了 4 0 版本时 它说我正在使用 NET 2 0 如何检测目标计算机上正在运行的 NET Framework 版本 En
  • “1个未解决的外部”C++

    我已经检查了所有文件之间的连接以及类和函数定义 但每次我尝试运行我的程序时 它都会阻止我并告诉我它有 1 个未解析的外部 该程序应该打开多个文件 一个 学生 文件和一个 成绩 文件 从中读取数据 然后使用 查询文件 来查找数据 找到查询中要
  • Boost.asio和异步链,unique_ptr?

    我对异步编程不太熟悉 我有一个问题 我的问题如下 给出 boost asio 中 C 11 的 echo server 示例 http www boost org doc libs 1 60 0 doc html boost asio ex
  • 为什么在构造函数中设置字段是(或不是)线程安全的?

    假设您有一个像这样的简单类 class MyClass private readonly int a private int b public MyClass int a int b this a a this b b public int
  • 如何在c#中创建多线程

    我需要监听机器中的所有串行端口 假设我的机器有 4 个串行端口 我必须创建 4 个线程并开始分别使用附加线程监听每个端口 我使用此代码来获取我的机器中的端口数量 private SerialPort comPort new SerialPo
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类

随机推荐

  • 包含conj的接口?

    作为练习 我正在开发一个类似于 Vector 的数据结构 我已经实现了 IPercientVector 扩展的所有接口 但我还没有找到定义 conj 的接口 那是哪个界面 谢谢 clojure lang IPersistentCollect
  • 与push()相反; [复制]

    这个问题在这里已经有答案了 JavaScript 的反义词是什么push method 假设我有一个数组 var exampleArray remove 我想要push 这个单词 keep exampleArray push keep 如何
  • “职称级别不一致”是什么意思?

    我在我的文档版本中收到了各种 标题级别不一致 的警告 据我所知 我有一个一致的结构 如下所示 Big Title Section Subsection 但该错误与自动生成相关 automodapi 我无法找到的文本 Classes 我怎样才
  • WP7从Tombstone恢复并返回页面

    从逻辑删除恢复时 是否有一种很好 优雅的方式返回用户所在的页面 我不确定我的应用程序是否正常工作 但我总是回到我的主页 我的应用程序设置了一个带有枢轴控件的主页 并且多个枢轴项目将导航到新页面 如果有意义的话 我的导航看起来像这样 数据透视
  • 谷歌放置自动完成API Android:边界不起作用

    我定义我的界限如下 private static final LatLngBounds BOUNDS CHENNAI new LatLngBounds new LatLng 12 8339547 80 0817007 new LatLng
  • Kubernetes 自动缩放容器

    是否可以自动缩放 docker 容器 其中包含 kubernetes 内的应用程序服务器 如 wildfly tomcat jetty 例如在 cpu 和 ram 使用或基于 http 请求 如果有一个内置功能 我找不到它 或者是否可以为此
  • 使用 PHP 实现 2 路加密的最佳方法是什么?

    我想在 PHP 中使用双向加密来加密我网站上的密码 我遇到过 mcrypt 库 但它看起来很麻烦 有人知道其他更简单但安全的方法吗 我确实可以访问 Zend Framework 因此使用它的解决方案也可以 我实际上需要双向加密 因为我的客户
  • 使用 ThreadStatic 来替换昂贵的本地变量——好主意吗?

    Update 正如我预料的那样 社区针对这个问题给出的合理建议是 衡量一下然后看看 chibacity 发布了 答案 https stackoverflow com questions 4864974 using threadstatic
  • 以编程方式在 Android 中配置第 3 方电子邮件帐户 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 禁用 JQuery 移动 UI 中的哈希更改控制器并替换为backbone.js

    我在用着jQuery 移动用户界面widgit 套件很不错 不过我也使用backbone js 它带有一个非常简洁的hashchange 控制器框架 问题是 JQuery Mobile UI 有一个内置的蹩脚哈希更改控制器 它假设您会alw
  • jQuery 缓动函数中有哪些不同的参数

    我看到 jQuery 的缓动函数位于https github com danro jquery easing blob master jquery easing js https github com danro jquery easing
  • 事务与批量查询以避免重复的 MySQL 插入

    我有一个PHP脚本 deleteAndReInsert php 删除所有行name Bob 然后插入 1000 个新行name Bob 这工作正常 最初的空表最终达到预期的 1000 行 query pdo gt prepare DELET
  • 合并数组中的对象并保留相同属性的最高值

    我有这个数组 我想合并其中的对象 null null 1 1 2 1 3 1 2 2 5 1 我考虑过使用这样的东西 var o1 a 1 b 1 c 1 var o2 b 2 c 2 var o3 c 3 var obj Object a
  • 合并到广告订单中

    我有一个看起来像这样的声明 MERGE INTO someTable st USING SELECT id field1 field2 etc FROM otherTable ot on st field1 ot field1 WHEN N
  • 获取正在运行的 java 进程的 java 版本

    我可以使用 jps 列出正在运行的 java 进程 并使用 jstack l process id 获取正在运行的 java 进程的堆栈信息 我想知道这个进程在哪个java版本上运行 有办法做到吗 我不必使用 jstack 工具 谢谢 js
  • AngularJs 将带有子集合的对象发布到 MVC WebAPI

    我正在开发一个 AngularJS 应用程序 服务 js 中的方法之一将数据发送到具有以下 C 对象结构的 Web api public class InvitationModel public string Name get set pu
  • 为什么在 Solaris 10 中,timer_create 会抛出 SIGEV_THREAD 错误?

    我写了一段使用timer create来设置计时器来调用一个线程 其中我将sigev notify设置为SIGEV THREAD 它给了我错误EINVAL 无效参数 但是当我将sigev notify设置为SIGEV SIGNAL时 代码工
  • 始终为 False Q 对象

    在 Django ORM 中 如何创建一个始终为 False 的 Q 对象 这类似于关于的问题始终为 True Q 对象 https stackoverflow com q 33517468 247696 但反之亦然 请注意 这不起作用 F
  • 检测上传的文件是否太大

    这是我的上传表单
  • C# 会内联在接口中声明的方法吗?

    如果我有一个界面 interface IMyInterface void DoSomething 和一个实现类 class MyClass IMyInterface public void DoSomething DoSomething 是