標籤:style color 使用 strong 檔案 資料 art ar
一.類
1. 什麼叫做類?
類是具有相同特徵的一類事物統稱。所以類是一種抽象,即不是一個實體(我們把類看做模板)。
2. 什麼叫做對象?
對象是根據類的模板創造出來的一個實體,它具有類裡所有的特徵,一個也多不得,一個也少不得。少了就不叫這個類的成員了,多了也不是!假如張三有變身這個功能,那麼張三就不屬於人。
記住對象是根據模板建立的,模板有什麼它就有什麼,不會多也不會少!
3. 什麼叫做欄位(或者是成員變數)?
我們把定義在方法的外面,類的裡面(即:類中)的變數稱之為欄位或者說是成員變數。
4. 類的定義:(通過class關鍵字建立)
Class 類名
{
類的成員;
}
注意:類是抽象的不能直接使用,我們只能建立類的對象以後才能使用。(理解:好比類就是我們建房子的圖紙,你總不能對你老婆說我買房了,老婆問你房呢?然後你就給她一張紙,後果你想….)
5. 建立類的對象
文法:類名 對象名=new 類名();
注意:其中new關鍵字在上面這句話中做了四件事:
1> 首先new關鍵字在堆空間裡開闢一塊合適大小的空間。
2> 按照類的模板建立類的對象。
3> 調用建構函式
4> 返回對象在堆空間的記憶體位址。
6. 訪問類的成員:
文法:對象名.成員。通過上述文法來訪問類的屬性成員和方法。
7. 類的資料類型和this關鍵字
a. 根據建立對象的文法和原理(即在記憶體中的結構)我們可以知道:類是一種參考型別。
b. this關鍵字是代表當前執行個體的(或者當前對象的)。
二.命名空間
1. 命名空間的作用?
命名空間主要是用於解決類的重名。
2. 快速引進命名空間的方法:類名(保證正確)右鍵->解析。
3. 如果多個類在同一命名空間我們則不需要using引進命名空間,直接建立對象執行個體來調用類成員。
4. 我們可以修該預設的namespace名,不要認為在相同檔案夾下就不用using,主要看命名空間是否相同,相同就不需要,不相同就要引進命名空間。
5. 在代碼中使用其他類的時候,需要using引進類命名空間然後再使用。
三.存取修飾詞
一. 類的成員存取修飾詞
1> public 公有的,public是最高許可權可以在任何地方訪問。
2> private 私人的,只能在本類中訪問。
3> internal 只能在當前程式集中訪問。不能跨程式集訪問。
4> protected 受保護的,只能在本類和子類中訪問,除了自己所在的類和子類就不能訪問的到。
5> 注意:類的成員預設存取層級是private
二. 類的存取修飾詞
1> public修飾的類可以在任意地方訪問,但還是要遵行:引進命名空間->建立類的對象->訪問類的成員。
2> internal 修飾的類只能在當前程式集中訪問。
3> 注意:如果類沒有寫存取修飾詞,那麼預設的則是:internal;記住類沒有private和protected修飾符(理解:被private修飾的成員只能被當前類的內部使用,若修飾類則在類的內部訪問?
可有意義?若你寫的類不想被訪問只想自己用?哪你寫類的意義何在?類就是把相同特徵的事物封裝起來供重複使用),若代碼在整個程式中只執行一次完全可寫在Main方法中)。
四.屬性
一. 文法:
[存取修飾詞] 屬性資料類型 屬性名稱
{
get
{
return 值;
}
set
{
欄位名 = value;
}
}
簡寫:[存取修飾詞] 屬性資料類型 屬性名稱{get;set;}
二. 屬性的賦值和取值
1> 在set方法中可以通過關鍵字value得到使用者賦的值。
2> 取值是通過get方法中return返回。
3> 屬性的本質是兩個方法。
4> 屬性不能存值,值是存在欄位中的。若用簡寫我們的vs編譯器會自動幫我們產生兩個私人欄位,實質上操作的還是欄位。
五.對象的初始化器
一. 文法:
如:Person p=new Person(){name=”tom”,age=18}
1> 在大括弧中為建立的對象各個屬性賦值,每個屬性用逗號分隔;
2> 在使用對象初始化器為對象賦值時,若調用的是無參建構函式時,那麼後面的“()”可以省略。
例:person p=new person{name=”tom”,age=18}
3> 後面“()”能省略的前提:
a.必須是使用對象初始化器為屬性賦值。
b.必須是調用的無參建構函式,有參建構函式就不行會報錯。
4> 對象初始化器可以給對象全部賦值也可以只給部分賦值,還有什麼都不做。
例:person p=new person{};(是合法的)
六.建構函式
一. 文法:
[存取修飾詞] 類名(參數)
{
函數體;
}
1> 存取修飾詞一般是public.
2> 建構函式沒有傳回值,連void都不用。
3> 建構函式可以重載(即可帶參數),在new對象的時候傳遞參數即可。
4> 如果沒定義建構函式,則系統會有一個預設的建構函式(無參),如果定義了建構函式(不管有參沒參)系統則不會再給我們定義預設的建構函式。
5> 建構函式在建立對象的時候被new關鍵字調用執行,建構函式不能被程式員手動調用。建構函式中可以調用普通方法,普通方法不能調用建構函式(只能在建立對象時被new調用)。
6> 建構函式特點:建立對象的同時建構函式中的代碼自動執行。
7> 建構函式的作用:一般情況下用來給對象的欄位或屬性賦值。哪怕欄位帶了初始值這個賦值過程也是在建構函式中來完成的!若沒帶初始值則在執行建構函式時,給欄位賦預設值,
實值型別=0,參考型別=null。即建構函式是用來初始化對象的。
8> 建構函式之間是可以相互調用的
文法: A建構函式():this(參數) //B建構函式
{
方法體;
}
根據“:this(參數)“來調用,編譯器會根據this後面括弧裡面的參數來匹配所調用的建構函式。
執行過程:
1> 先調用A建構函式
2> 再調用B建構函式
3> 先執行B建構函式
4> 再執行A建構函式
注意:在給B(被調用的建構函式)建構函式傳參數時,要麼給常量值要麼給A(本建構函式)建構函式的參數,不能給欄位!一個建構函式只能調用一個建構函式(不能掉2個或以上)。
七.部分類
一. 在同一個命名空間下,不能定義多個類名相同的類,因為這樣會起衝突。但是在同一命名空間下如果定義了多個類名相同的類但他們都被partial修飾了,這樣是可以的。因為他們本質上是同一個類(部分類或者夥伴類)。
因為C#編譯器會把他們編譯為一個類,所以你才可以在一個部分類中使用另一個部分類的成員。
二.滿足部分類的條件:
1>在同一命名空間。
2>類名相同。
3>類都被partial修飾
三.部分類的作用:方便管理,如:定義一個人類,這個類可能有1萬個欄位,我們可以把他們放在一個子類中,便於管理和維護。