天天看點

構造函數

構造函數

class a

{

public a()

}

與類名相同,無傳回值,且在初始化之前調用。

 a a=new a();

其中的a()就是構造函數。一般我們不寫構造函數系統會自動生成一個無參且為空的構造函數。

a a

開辟了一個棧 裡邊用于放對象在記憶體中的位址

new a();

如果直接這樣寫生成了一個匿名對象,如果加到a 後邊則a的棧放的是該記憶體的位址。

初始化執行個體:

calss a

 int age;

 public int age

 {

 get{return age;}

 set{age=value;}

 }

 string name;

 public string name

 get{return name;}

 set{name=value}

//a類的構造函數

//this 代表但前對象。在一個類中this.age/this.age如果沒有限制則相同,有限制需用this.age

 public a(int age,string name)

 this.age=age;

 this.name=name;

class program

 static void main(string args[])

 //a a=new a();

 //a.age=15 報錯因為構造函數已經不是系統自帶的了,而是我們寫的帶有參數的哪個,若要這樣指派則需在a中再寫一個構造函數,無參且為空

 //public a()

 //{

 //}

 //而要初始化執行個體如:

 a a=new a(15,"張三");

 生成了一個執行個體a 且已經初始化

繼承:

子類将擷取父類的所有非私有的資料和行為。

子類有兩個有效類型

自身的類型

擷取父類的類型

(私有字段或方法可以繼承但不能通路而已)

構造函數是不能繼承的,每個類都有自己的構造函數。初始化子類會先調用父類的構造函數

例:

messagebox.show("a 出生了");

class b

public b()

messagebox.show("b 出生了");

 static void main(sting args[])

  b b=new b();

  先彈出a出生了,後彈出b出生了

子類繼承父類,但初始化會調用父類無參的構造函數,如果沒有則編譯報錯,除非子類中能自己調用父類的有參的構造函數。

 string hobby;

 public string hobby

 get{return hobby}

 set{hobby=value}

 //public b()

 //報錯

 public b(int age,string name,string hobby):base(age,name)//繼承父類有參的構造函數

 this.hobby=hobby;

  b b=new b(20,"峻桦","運動");

  先調用a的構造函數,在調用b的構造函數。