extern 在 C# 中如何工作?

2024-04-26

每当我足够深入地观察反射镜时,我都会碰到extern没有来源的方法。我阅读了 msdn 文档http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx。我从那篇文章中得到的是方法extern必须注入修饰符。我将此解释为它的工作原理类似于抽象工厂模式。我还注意到我从未见过非静态外部方法。静态声明是一个要求吗(我可以看出这有什么意义)?我仍然在这里猜测,我不确定它实际上是如何工作的。在我看来,编译器必须识别某些可以减轻处理的属性,但除了我遇到的属性之外,我不知道这些属性是什么MethodImplAttribute and DllImportAttribute来自 MSDN 示例。某人如何利用extern属性?它说在许多情况下这可以提高性能。另外,我将如何去调查来源extern方法如Object.InternalGetEquals()?


请考虑阅读 C# 规范的第 10.6.7 节,它回答了您的许多问题。为了您的方便,我在这里复制了部分内容:


当方法声明包含 extern修饰符,该方法是说 成为外部方法。外部的 方法是在外部实现的, 通常使用除 C#。因为外部方法 声明没有提供实际的 实现,方法体 外部方法简单地包含一个 分号。外部方法可能不会 是通用的。外部修饰符是 通常与 DllImport 属性, 允许外部方法 由 DLL 实现(动态链接 图书馆)。执行环境 可以支持其他机制 外部方法的实现 可以提供。当外部 方法包含 DllImport 属性, 方法声明还必须 包括静态修饰符。


人们如何利用外部属性?

  • 使用您选择的非托管语言编写代码。
  • 将其编译成 DLL,导出代码的入口点。
  • 创建一个互操作库,将该方法定义为给定 DLL 中的外部方法。
  • 从 C# 调用它。
  • Profit!

我将如何着手研究外部方法(如 Object.InternalGetEquals())的来源?

Go to https://github.com/dotnet/coreclr/tree/master/src/vm https://github.com/dotnet/coreclr/tree/master/src/vm

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

extern 在 C# 中如何工作? 的相关文章

随机推荐

  • 使用 CTE 以及开始和结束日期时间避免日期时间间隔中的间隙

    由于某种原因 我发现使用此查询的时间间隔存在间隙 我只使用基本数据就可以正常工作 但是 当连接表并指定 WHERE 子句时 我发现时间间隔存在间隙 我还需要将 S SessionEndTime 合并到我的时间间隔中 以查找 Response
  • 设置 blob 的内容类型

    我们正在转移一个Blob 图片 下载一个 websocket 并将其渲染到另一端的画布上 当我使用createObjectURL对于斑点 我收到以下警告 Resource interpreted as Image but transferr
  • Rails form_for 选择已选择选项的标签

    我正在使用 form for 来更新用户个人资料 作为表单的一部分 我使用选择菜单 菜单由数组填充 即 STATUS Active active In Active inactive 然后在表格中 虽然这项工作没有选择之前在编辑时选择的选项
  • querySelector 中哪些字符需要转义?

    根据这里的文档 https developer mozilla org en US docs Web API document querySelector Notes https developer mozilla org en US do
  • 如何用Java编写某些语法的LALR解析器?

    我想编写 Java 代码来为我的语法构建 LALR 解析器 有人可以推荐一些书籍或一些链接 让我可以学习如何为 LALR 解析器编写 Java 代码吗 手动编写 LALR 解析器很困难 但他可以做到 如果您想了解手动构建解析器背后的理论 请
  • CodeIgniter - 自动加载

    我想知道 CodeIgniter 自动加载的最佳实践是什么 自动加载我的所有内容是不是不好的做法might是否曾经需要过 或者可以这样做吗 这会给应用程序带来更多负载吗 目前 我只是自动加载我将在整个应用程序中使用的库和助手 autoloa
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 如何从一个Android应用程序调用另一个Android应用程序

    我想从另一个应用程序调用一个 Android 应用程序 我尝试过一些examples http www anddev org install run applications from within another application
  • 使用 JsonView 将 POJO 转换为 JsonNode

    我正在编写一个典型的 Play Framework 应用程序 我想使用 Jackson 从控制器的方法返回 JsonNode 这就是我现在正在做的 public static Result foo MyPojoType myPojo new
  • 如何禁用 moment.js 夏令时时区转换

    可以在 moment js 中禁用日光时区转换吗 http plnkr co edit MjFelt p preview http plnkr co edit MjFelt p preview scope obj date moment 2
  • 如何检查 Mypy `# type:ignore` 注释是否仍然有效且必需?

    想象一下 我们有一些巨大的遗留代码库 其中有很多文件被忽略了 Mypy 警告 def foobar x some external class some method 0 type ignore ignore some mypy warni
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • 模块“pandas”没有属性“read_csv”

    import pandas as pd df pd read csv FBI CRIME11 csv print df head 运行这个简单的代码会出现错误 Traceback most recent call last File C U
  • 当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

    Both static cast and reinterpret cast似乎适合铸造void 到另一个指针类型 是否有充分的理由偏爱其中之一 Use static cast 这是最精确的转换 准确地描述了此处进行的转换 有一个误解 认为使
  • 具有异步函数的 JavaScript 数组

    我有一个 JavaScript 字符串数组 该数组的定义如下 var myArray myArray push 1 myArray push 2 myArray push 3 我需要循环遍历数组并调用异步运行的函数 该函数如下所示 func
  • Visual Studio/SOAP -“添加服务引用”与“添加 Web 服务引用”

    我发现我可以将计划使用的 SOAP WSDL 服务作为 Web 服务引用 System Web Services 或 服务引用 System ServiceModel WCF 导入到我的解决方案中 我想知道有什么区别 据我所知 添加服务引用
  • RedHat 6/Oracle Linux 6 不允许通过 ssh 进行密钥身份验证

    密钥已正确部署在 ssh authorized keys 中 然而 ssh 不断提示输入密码 几个问题 主要是特权 但也与 RedHat 6 上的 SELinux 有关 以下脚本应该可以修复所有问题 请替换
  • 非矩形 CSS 图像链接

    我有以下要求 大图像包含多个需要链接到其他页面的 热点 听起来很简单 我创建了一个简单的 html 页面 一个带有背景图像的 div 和使用带有图像精灵翻转的 CSS 的绝对定位链接 然而 现在我看到了另一张图像 热点不是方形的 而是不规则
  • 仅带有取消按钮的消息框

    我们可以有一个只有取消按钮的消息框吗 如果是这样 有什么提示吗 是否有内置的 api 方法来仅获取带有取消按钮的消息框 如何创建自定义模式对话框 有链接吗 您可以通过以下方式使用线程本地 CBT 挂钩SetWindowsHookEx 定制M
  • extern 在 C# 中如何工作?

    每当我足够深入地观察反射镜时 我都会碰到extern没有来源的方法 我阅读了 msdn 文档http msdn microsoft com en us library e59b22c5 v vs 80 aspx http msdn micr