C# 中值类型和引用类型

in 软件 with 0 comment

这个话题其实蛮基础的。
注:堆栈就是栈(stack)
值类型 值类型实例通常分配在线程的堆栈(stack)上,并且不包含任何指向实例数据的指针,因为变量本身就包含了其实例数据
引用类型 引用类型的变量会被分配到堆栈上,这个变量将用于保存位于堆上的该引用类型的实例的内存地址,变量本身不包含对象的数据。new关键字会在堆上创建一个对象,返回一个该对象的地址。
举例,如果我们有一个这样的类,它代表一个人:

class Person {
    public stirng name;
    public int age;
}

当我们仅仅写下一条声明语句:

Person p;

那样仅仅在堆栈上创建一个不包含任何数据,也不指向任何对象(不包含创建再堆上的对象的地址)的变量。
而当我们使用new操作符时:

Person p = new Person();

会发生这样的事:

  1. 在应用程序堆(Heap)上创建一个引用类型(Type)的实例(Instance)或者叫对象(Object),并为它分配内存地址。
  2. 自动传递该实例的引用给构造函数。(正因为如此,你才可以在构造函数中使用this来访问这个实例。)
  3. 调用该类型的构造函数。
  4. 返回该实例的引用(内存地址),赋值给p变量。

请输入图片描述

Responses