當實例化一個類時,系統會自動對這個類的屬性進行初始化
數字型初始化成0/0.0
string類型初始化成null
char類型初始化成\0
構造器就是構造方法,能夠被重載(同類中不同參數列表的構造器),
不能夠被重寫(子類使用super方法可以調用)。
不能說能被繼承,因為能夠調用,但是不能重寫。
使用構造方法的好處:
1.對多個屬性進行賦值時,不需要重復的寫實例名
2.可以保證用戶在new一個對象時,必須對某一個屬性進行賦值
3,在創建對象時,對制度屬性進行初始化
當我們定義好一個類后,如果沒有寫構造方法,那么系統會自動給我們加上一個默認的沒有參數的構造方法,在這個構造方法中,什么也不做,我們也看不到
我們可以定義一個構造方法:
構造方法是一個特殊的方法,他的名字和類的名字相同,並且沒有返回值,連void都可以省略不寫,我們一旦手寫一個構造方法后,系統原先默認給我們添加的那個無參的構造方法就不會給我們添加了
要實例化一個類,必須調用他的構造方法
總結:
構造方法用來創建對象,並且可以在構造方法中對對象進行初始化
構造方法是用來創建對象的特殊方法,方法名和類名一樣,沒有返回值,連void都不用
構造方法可以有參數,new對象的時候傳遞參數即可
如果不指定構造方法,則類有一個默認的無參構造方法
如果指定了構造方法,則不再有默認的無參構造方法,如果需要無參構造方法,則需要自己來寫
構造方法可以重載,也就是有多個參數不同的構造方法。
練習:
寫一個Ticket類,有一個距離屬性(本屬性只讀,在構造方法中賦值),不能為負數,有一個價格屬性,價格屬性為只讀,並且根據距離計算價格(1元/公里):
0-100公里:票價不打折
101-200公里 :總額打9.5折
201-300公里:總額打9折
300公里以上:總額打8折
有一個方法,可以顯示這張票的信息
代碼如下:
using System;
using System.Collections.Generic; using System.Text; namespace 構造方法 { class Ticket { public Ticket(double length) { this.length = length; } double length; double price; public double Length { get { if (length < 0) { length = 0; } return length; } } public double Price { get { if (length <= 100) { price = length; } else if (length > 100 && length <= 200) { price = 0.95 * length; } else if (length > 200 && length <= 300) { price = 0.9 * length; } else if (length > 300) { price = 0.8 * length; } return price; } } public void ShowInfo() { Console.WriteLine("距離:{0},票價:{1}",Length,Price); } } }