我目前正在浏览反编译的 C# IL(使用 ILSpy),以了解 System.Runtime.InteropServices 中的某些方法是如何(可能)实现的。
当我想查看 Marshal.Copy() 是如何实现的时,发现它只调用了 CopyToNative() ,其定义如下:

// System.Runtime.InteropServices.Marshal
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void CopyToNative(object source, int startIndex, IntPtr destination, int length);

它在哪里实现?
有没有机会看看它的(反编译的)源代码?
如果没有,有没有人知道如何实现它?

最佳答案

MethodImplAttributeextern 关键字表明该函数是 .NET 运行时本身的内部函数。这个函数几乎肯定是在运行时的源代码中用 C 或 C++ 实现的。

如果无法访问运行时的源代码,您唯一真正的选择就是反汇编这个特定的函数并检查程序集。 (请注意,这样做可能会违反您的运行时的 EULA。)

您可能会考虑查看 Mono 的源代码以了解一种可能的实现。

  • Marshal.Copy() implementations
  • copy_to_unmanaged() runtime-internal implementation
  • 关于c# - CopyToNative 在哪里定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14526533/

    10-12 05:14