静态外部void Buffer.InternalBlockCopy是.NET Framework的一部分吗?

时间:2018-08-10 06:50:00

标签: c# .net winapi

我研究FileStream is implemented in C#的方式,并在Read(..)方法中可以看到:

n = ReadCore(_buffer, 0, _bufferSize);
...
Buffer.InternalBlockCopy(_buffer, _readPos, array, offset, n);
...

其中Buffer.InternalBlockCopy指向buffer.cs中的定义(波纹)。方法BlockCopy被定义为静态外部。该方法在哪里定义?它是.NET的一部分吗?是托管的还是本地的?

[System.Runtime.InteropServices.ComVisible(true)]
public static class Buffer
{
    // Copies from one primitive array to another primitive array without
    // respecting types.  This calls memmove internally.  The count and 
    // offset parameters here are in bytes.  If you want to use traditional
    // array element indices and counts, use Array.Copy.
    [System.Security.SecuritySafeCritical]  // auto-generated
    [ResourceExposure(ResourceScope.None)]
    [MethodImplAttribute(MethodImplOptions.InternalCall)]
    public static extern void BlockCopy(Array src, int srcOffset,
        Array dst, int dstOffset, int count);
..
}

1 个答案:

答案 0 :(得分:1)

好吧,extern keyword表示方法是在 C#代码外部

中定义的
[MethodImplAttribute(MethodImplOptions.InternalCall)]

表示它调用了Common Language Runtime中定义的方法。

MethodImplOptions docs之后:

  

该调用是内部的,也就是说,它调用在公共语言运行库中实现的方法。