每当我足够深入地观察反射镜时,我都会碰到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(使用前将#替换为@)