美文网首页
2024-01-14 栈堆

2024-01-14 栈堆

作者: 午字横 | 来源:发表于2024-01-13 13:27 被阅读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

    相关文章

      网友评论

          本文标题:2024-01-14 栈堆

          本文链接:https://www.haomeiwen.com/subject/irifodtx.html