2024-01-14 栈堆

2024-01-13  本文已影响0人  午字横

1.类和结构有以下几个基本的不同点:

  1. 类是引用类型,结构是值类型。
  2. 结构不支持继承。
  3. 结构不能声明默认的构造函数。不允许显式的无参构造函数,允许显示的有参构造器
  4. 结构体中声明的字段无法赋予初值,类可以
  5. 类的对象是存储在堆空间中,结构存储在栈中。

.Net下的栈(Stack)和托管堆(Heap)(简称堆)

image.png

- 第一段存储实际的数据,它总是位于堆中。
- 第二段是一个引用,指向数据在堆中的存放位置。

值类型与引用类型的区别

值类型与引用类型都继承自Systerm.Object类。不同之处,几乎所有的引用类型都是直接从Systerm.Object继承,而值类型则是继承Systerm.Object的子类Systerm.ValueType类。
我们在给引用类型的变量赋值的时候,其实只是赋值了对象的引用;而给值类型变量赋值的时候是创建了一个副本(说通俗点,就是克隆了一个变量)。

public class Lesson : MonoBehaviour
{
    void Start()
    {
        Student_01 stu1=new Student_01("1号");
        Student_01 stu11=stu1;
        stu1.name = "11号";
        Debug.LogError(stu11.name);  
        Debug.LogError(stu1.name);   //类是引用类型,给引用类型的变量赋值的时候,其实只是赋值了对象的引用。 stu1和stu11都是对同一块堆地址的引用;


        Student_02 stu2 = new Student_02("2号");
        Student_02 stu22 = stu2;
        stu22.name = "22号";
        Debug.LogError(stu22.name);
        Debug.LogError(stu2.name);  //struct是值类型,给值类型变量赋值的时候是创建了一个副本(说通俗点,就是克隆了一个变量)。
    }

    
}
public class Student_01
{
    public Student_01(string str){ name = str; }

    public string name;
}
public struct Student_02
{
    public Student_02(string str) { name = str; }
    public string name;
}

2024-01-14

上一篇下一篇

猜你喜欢

热点阅读