我今天被打动了,有比较内脏的倾向,Buffer.BlockCopy
我Array.CopyTo.
很好奇是否Array.CopyTo
被称为Buffer.BlockCopy
幕后。这背后没有任何实际目的,我只是想进一步了解C#语言以及它是如何实现的。不要过分指责我微优化,但你可以指责我好奇!
当我在 mscorlib.dll 上运行 ILdasm 时,我收到了这个Array.CopyTo
.method public hidebysig newslot virtual final
instance void CopyTo(class System.Array 'array',
int32 index) cil managed
{
// Code size 0 (0x0)
} // end of method Array::CopyTo
这对于Buffer.BlockCopy
.method public hidebysig static void BlockCopy(class System.Array src,
int32 srcOffset,
class System.Array dst,
int32 dstOffset,
int32 count) cil managed internalcall
{
.custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 )
} // end of method Buffer::BlockCopy
坦率地说,这让我感到困惑。我从来没有在我没有创建的 dll/exe 上运行 ILdasm。这是否意味着我将无法看到这些功能是如何实现的?四处搜索只发现了一个 stackoverflow 问题,Marc Gravell 说
[
Buffer.BlockCopy
] 基本上是原始内存副本的包装器
虽然很有见地,但它并不能回答我的问题 if Array.CopyTo
calls Buffer.BlockCopy
。我特别感兴趣的是我是否能够看到这两个函数是如何实现的,如果我以后对 C# 的内部有疑问,我是否有可能对其进行调查。还是我运气不好?