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.構造器在內存裏是怎樣操做的this
在stack中是從內存地址由高到低分配的,因此叫棧溢出(stackoverflow)spa
1,對於不帶參的構造函數code
先在stack中開闢一個空間用來存放引用變量,而後去heap裏面根據成員變量類型,依次開闢空間,數據存爲0,而後將其地址複製放在剛剛stack的位置blog
2.對於帶參的構造函數內存
先在stack中開闢一個空間用來存放引用變量,而後去heap裏面根據成員變量類型,依次開闢空間,存放初始化的數據,若是是值類型,就放數據,若是是引用類型,再去另外一塊heap中開闢地址,把真正的數據放在新開闢的位置,把位數據的地址放在第一次開闢heap的裏面,stack裏面存放數據開始時候的地址,有點堆中堆的感受;string