.NET的基元类型包括哪些?Unmanaged和Blittable类型又是什么?

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

本文介绍了.NET类型系统中的基元类型、非托管类型和可复制类型。基元类型包括整数、浮点数、布尔和字符类型。非托管类型是不涉及托管对象引用的值类型,包括基元类型、枚举类型、指针类型和只包含非托管类型字段的结构体。可复制类型是在P/Invoke互操作中对传递的值是否需要转换进行分类的类型,包括除布尔和字符类型外的基元类型、基元类型的一维数组和采用Sequential和Explicitly布局的结构体或类。

🎯

关键要点

  • 本文介绍了.NET类型系统中的基元类型、非托管类型和可复制类型。
  • 基元类型包括14种类型:10种整数、2种浮点数、1种布尔类型和1种字符类型。
  • 字符串和Decimal并不是基元类型。
  • 可以通过Type对象的IsPrimitive属性判断某个类型是否为基元类型。
  • 非托管类型是不涉及托管对象引用的值类型,包括14种基元类型、Decimal、枚举类型、指针类型和只包含非托管类型字段的结构体。
  • 可复制类型是基于P/Invoke互操作的分类,要求在托管内存和非托管内存具有一致的表示。
  • 可复制类型包括除布尔和字符类型外的12种基元类型、一维数组和采用Sequential和Explicitly布局的结构体或类。
  • DateTime、DateTimeOffset和Guid等类型由于布局原因并非可复制类型。
  • 只有可复制类型的实例才能创建Pinned类型的GC句柄。
➡️

继续阅读