文章目录
0x01 背景
看着标题是不是很诧异? struct不是值类型么? 怎么是 object?
先看看一段代码, 输出的结果是是什么?
using System;
namespace StructDemo
{
class Program
{
static void Main(string[] args)
{
MyStruct myStruct = new MyStruct();
Console.WriteLine($"my struct is object:{myStruct is object}");
int a = 1;
Console.WriteLine($"int is object:{a is object}");
}
}
struct MyStruct
{
}
}
输出结果如下:
明明我们学习的时候说 struct
是值类型, 为什么代码输出True
?
0x02 文档
我们来看看微软的文档怎么来描述的: 常规类型系统 | Microsoft Docs
.NET 中的所有类型不是值类型就是引用类型。
值类型是使用对象实际值来表示对象的数据类型。 如果向一个变量分配值类型的实例,则该变量将被赋以该值的全新副本。
引用类型是使用对对象实际值的引用(类似于指针)来表示对象的数据类型。 如果为某个变量分配一个引用类型,则该变量将引用(或指向)原始值。 不创建任何副本。
.NET 中的通用类型系统支持以下五种类别的类型:
具体来说:
- 类 : 类是可以直接从另一个类派生以及从 System.Object 隐式派生的引用类型。
- 结构 : 结构是隐式从 System.ValueType 派生的值类型,后者则是从 System.Object 派生的。 对于表示内存要求较小的值以及将值作为按值参数传递给具有强类型参数的方法,结构很有用。 在 .NET 中,所有基元数据类型(Boolean、Byte、Char、DateTime、Decimal、Double、Int16、Int32、Int64、SByte、