C# 值类型和引用类型

值类型直接持有值 — 例如,所有基本类型、结构体和枚举。然而,C# 引用类型包含对堆上值的引用 — 例如,字符串、对象、类、数组、委托。

C# 值类型和引用类型

分配给变量的内存类型

在继续讨论数据类型(C# 值类型和引用类型)的分类之前,让我们快速了解一下应用程序中的内存分类。

  1. 全局内存(Global): 实际上,这是一个 C 语言概念,其中全局变量会使用这种全局内存。这些变量在应用程序启动时分配内存,并一直存在直到应用程序的生命周期结束。
  2. 栈(Stack): 由方法的局部变量使用。当一个方法被调用时,会为该方法的局部变量分配一块栈内存。当方法返回时,栈内存将被清除。
  3. 堆(Heap): 应用程序在运行时的内存需求将从堆内存中满足。当一些内存分配给堆变量后,一旦其工作完成,就必须返回给堆(释放),以便其他变量重用。 
C# Value Types and Reference Types

值类型

通常,所有的基本数据类型、结构体和枚举都属于值类型。

从某种意义上说,值类型是分配给变量的内存,其中包含变量的实际值。

内存会根据变量的作用域分配给值类型。如果它是一个局部变量或参数,它会分配栈内存。如果它是一个对象的成员,它将在堆上分配内存。

引用类型

分配给引用类型的内存永远不会持有变量的实际值。相反,它持有对堆上值的引用。

在实时环境中,所有与内存相关的任务都由 .Net 通过内存管理来处理。

但作为一名程序员,了解这一点会更好,这样您可以更有效地优化代码,并获得更好的性能。

分类 C#