每当我深入反射器时,我会遇到extern种没有来源的方法.我在http://msdn.microsoft.com/en-us/library/e59b22c5(v=vs.80).aspx读了msdn文档.我从那篇文章中得到的是,必须注入带有extern修饰符的方法.我将其解释为,它的工作原理类似于抽象的工厂模式.我还注意到,我从未见过非静态外部方法.静态声明是一项要求吗(我可以看出这有什么意义)?我还在猜测,我不确定它到底是如何工作的.在我看来,编译器必须识别某些减轻处理的属性,但除了MSDN示例中遇到的MethodImplAttributeDllImportAttribute之外,我不知道这些属性是什么.人们如何利用extern属性?它说,在许多情况下,这可以提高性能.另外,我该如何着手研究Object.InternalGetEquals()这样的extern种方法的来源呢?

推荐答案

考虑阅读C规范的阅读部分,它回答了你的许多问题.为了方便起见,我在这里复制了其中的一部分:


当方法声明包含 外部修饰符,该方法被称为 成为一种外部方法.外部 方法在外部实现, 通常使用的语言不同于 C#.因为一种外部方法 声明没有提供实际的 实现,方法的主体是 外部方法只由一个 分号.外部方法可能不能 要通俗易懂.外部修饰符是 通常与 DllImport属性, 允许外部方法被 由DLL(动态链接)实现 库).执行环境 可以支持其他机制,从而 外部方法的实现 可以提供.当外部 方法包括DllImport属性, 方法声明还必须 包括静电修饰符.


有人如何利用extern属性?

  • 用您 Select 的非托管语言编写代码.
  • 将其编译成DLL,导出代码的入口点.
  • 创建一个互操作库,将该方法定义为给定DLL中的外部方法.
  • 从C#开始叫它.
  • 利润

我该如何着手研究Object.InternalGetEquals()等外部方法的源代码呢?

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

.net相关问答推荐

为什么我在环境变量中有不同的值?

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

在接口内部声明 IEnumerable 而在具体类中声明 IList

即时窗口中的动态导致Microsoft.CSharp.RuntimeBinder.Binder未定义或导入错误

.NET 的 Visual Studio 调试器提示和技巧

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

异步总是 WaitingForActivation

如何让 DateTimePicker 显示一个空字符串?

如何判断一个类型是否是简单类型?即持有一个单一的价值

控制台应用程序的退出时

Java 和 .NET 技术/框架的类似物

DateTime.TryParseExact() 拒绝有效格式

如何对无法加载的 VSTO 插件进行故障排除?

无法将文件 *.mdf 作为数据库附加

强制 XmlSerializer 将 DateTime 序列化为 'YYYY-MM-DD hh:mm:ss'

让 String.Replace 只打整个单词的方法

从 C# 中的字符串中删除最后一个字符.优雅的方式?

如何访问 Session 变量并在 javascript 中设置它们?

如果选中,则更改列表框项的 WPF DataTemplate