微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CoreCLR 内部原理:CLR 如何解析数组的长度

如何解决CoreCLR 内部原理:CLR 如何解析数组的长度

我一直试图找出 Length 类的 System.Array 属性的实现(出于好奇)。因此,在官方 dotnet/coreclr 存储库中,我找到了该类 (the link) 的定义,但我完全不了解代码。就这样:

public int Length => checked((int)Unsafe.As<RawArrayData>(this).Length);

MS docsUnsafe.As 方法的评价:

Unsafe.As<T>(Object) 将给定对象强制转换为指定类型。

因此我们将 System.Arraythis 实例转换为 RawArrayData获取返回对象的 Length 字段。

让我们看看 RawArrayData 类中的 System.Runtime.CompilerServices.RuntimeHelpers(它是一个嵌套类,the link):

internal class RawArrayData
{
    public uint Length; // Array._numComponents padded to IntPtr
#if bit64
    public uint Padding;
#endif
    public byte Data;
}

正如我们所见,它只是一个字段为空的类,CoreCLR 是如何解析 RawArrayData.Length 的?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。