l 類是抽象的概念,僅僅是模板,比如說:”人”類.
l 對象是一個你能夠看得到、摸得着的具體實體
l “人”類都有:姓名\性別\年齡 屬性,有說話的方法。
l 張三是一個對象,他的姓名屬性的值:張三 性別的屬性的值:男 年齡屬性的值:20 張三會說話。
l 對象可以叫做類的實例(instance)。
l 類不佔內存,對象才佔內存。
定義類的語法:
[訪問修飾符]class 類名
{
成員;
。。。。。。
}
在我們自己寫的類中,我們在寫方法時,先不用加static。
下面我們定義了一個叫Person的類,這個類僅僅是人這個對象的模板。
在這個模板中規定人類對象都應該有姓名,性別,年齡屬性,和SayHello的方法。
如何通過一個類來產生一個對象呢?
通過類來產生一個對象的過程,叫類的實例化。
類的實例化:
類名 實例名 = new 類名();
Person zsPerson;//定義了一個變量,這個變量的類型時Person類型。
zsPerson = new Person();//通過new關鍵字來產生一個Person對象,此時佔用了一塊空間。
zsPerson和lsPerson是實例名。
訪問類的屬性:
實例名.屬性名
訪問類的方法:
實例名.方法名()
只要沒有加static的方法或屬性,都必須先實例化,再通過實例名.方法名或者實例名.屬性來訪問。
加static的方法或屬性,可以直接通過 類名.方法名或類名.屬性來訪問。
訪問修飾符:
public:可以再任意地方被訪問
internal:只能在本項目中被訪問
private:只能在本類中被訪問
protected:只能在本類和子類中被訪問
在類這個級別,不寫訪問修飾符默認爲internal
在一個類中定義變量或者方法時,沒有寫訪問修飾符,則默認爲private
屬性:
通俗點說,就是定義一個public的具有get/set方法的變量。這個變量時用於保護一個私有變量。
l 屬性是爲了保護與之相對應的字段的.保證對字段的讀取和賦值符合要求.
l 屬性可分爲:讀寫、只讀、只寫。
l 允許外部訪問的變量一定要聲明爲屬性。
讀寫屬性:具有set/get方法的屬性
只讀屬性:只有get方法的屬性。這個屬性只能讀取,不能寫入。
只寫屬性:只有set方法的屬性。這個屬性只能寫入,不能讀取。(用的很少)
當我們實例化一個類時,系統會自動對這個類的屬性進行初始化。
數字類型初始化成0/0.0
string類型初始化成:null
char類型初始化成:\0
構造方法:
使用構造方法的好處:
l 對多個屬性進行復制時,不需要重複的寫實例名。
l 可以保證用戶在new一個對象的時候必須對某個屬性進行賦值。
l 和第2類似,在創建對象時,對只讀屬性進行初始化。
當我們定義好一個類後,如果我們沒有寫構造方法,那麼系統會自動給我們加一個默認的無參數的構造方法。在這個構造方法中什麼也不做,我們也看不到。
我們可以自定義一個構造方法:
自定義一個構造方法後,不再有默認的無參構造方法。如果需要自己寫一個。
構造方法是一個特殊的方法,她的名字和類的名字相同,並且沒有返回值。連void都得省略。
構造方法用來創建對象,即在構造方法中對對象進行初始化。
構造方法也可以重載,也就是有多個參數不同的構造方法。
命名空間:
l namespace(命名空間),用於解決類重名問題,可以看做“類的文件夾”。
l 如果代碼和被使用的類在一個namespace則不需要using。
l 在不同命名空間下的類調用有兩種方法:1.寫全稱 命名空間.類名 2.先using引用命名空間,再調用。
l 命名空間是邏輯上的劃分,不是物理上的劃分。
類圖:
“—”表示是私有的屬性。private
“+”表示公有的屬性。public
下圖是.net中的類圖。
析構函數(*):清理垃圾用的函數,在C#中不需要了,已經有了垃圾回收機制。
l 不能在結構中定義析構函數。只能對類使用析構函數。
l 一個類中只能有一個析構函數。
l 無法繼承或重載析構函數。
l 無法調用析構函數。它們是被自動調用的。
l 析構函數即沒有修飾符,也沒有參數。
和構造函數(方法)類似。
是最後一個被調用的方法。
params:
params可以把n個參數變成一個數組參數。
可變數組必須作爲最後一個參數。