标签:变量 开始 引用类型 static 数据 空间 成员函数 初始化 之一
class Student { public int ID; public string Name; public Student()//不带参的构造器,制造出来就又默认值了 { this.ID = 1; this.Name = "No name"; } public Student(int initId,string initName)//带参构造器,需要在创建实例的时候手动写入 { this.ID = initId; this.Name = initName; } }
static void Main(string[] args) { Student stu = new Student(2,"Mr okay"); Student stu2 = new Student(); }
*加构造器的快捷件 ctor+两次tab
2.构造器在内存里是怎样操作的
在stack中是从内存地址由高到低分配的,所以叫栈溢出(stackoverflow)
1,对于不带参的构造函数
先在stack中开辟一个空间用来存放引用变量,然后去heap里面根据成员变量类型,依次开辟空间,数据存为0,然后将其地址复制放在刚刚stack的位置
2.对于带参的构造函数
先在stack中开辟一个空间用来存放引用变量,然后去heap里面根据成员变量类型,依次开辟空间,存放初始化的数据,如果是值类型,就放数据,如果是引用类型,再去另一块heap中开辟地址,把真正的数据放在新开辟的位置,把位数据的地址放在第一次开辟heap的里面,stack里面存放数据开始时候的地址,有点堆中堆的感觉;
标签:变量 开始 引用类型 static 数据 空间 成员函数 初始化 之一
原文地址:https://www.cnblogs.com/1521681359qqcom/p/11192202.html