noteBook2 14 C 基礎第十四天

2021-08-09 20:11:56 字數 1649 閱讀 6639

多型(讓乙個物件能夠表現出多種的狀態,即型別)

三種方法:

a.提供的類中能夠抽象出乙個父類,且父類中必須寫幾個類共有的乙個方法,在不知道怎麼寫這個方法的情況下用抽象類;

b.若抽象出來的父類中的方法可以寫,並需要建立父類的物件,用虛方法;

c.給出的類中根本找不出父類,但都有乙個共同的能力,用介面(多繼承情況)。

1.虛方法

將父類的方法標記為虛方法,使用關鍵字virtual,這個函式可以被子類重新寫一遍,子類需要加關鍵字override;

**呼叫的仍然是父函式,只是在子類中重新寫了一遍,調的是被子類重寫的方法。

2.抽象類

當父類中的方法不知道如何實現時,可以考慮將父類寫為抽象類,將方法寫成抽象方法;抽象方法沒有方法體。

方法寫成抽象方法要點:

a.抽象成員必須標記為abstract,並且不能有任何實現;

b.抽象成語必須在抽象類中;

c.抽象類不能被例項化;(即不能建立物件,因此只能創子類物件)//animal a=new dog();

d.子類繼承抽象類後必須把父類中的所有抽象成員都重寫;(除非子類也是乙個抽象類,則可以不重寫)

e.抽象成員的訪問;

f.抽象類中可以包含例項成員,且可以不被子類實現;

g.抽象類是有建構函式的,雖然不能被例項化;

h.如果父類中的抽象方法有引數,那麼繼承此父類的子類在重寫父類的方法時,也必須傳入對應引數;若父類的抽象方法中有返回值,那麼子類重寫時也要傳入對應返回值。

**如果父類中的方法有預設的實現,並且父類需要被例項化,這時可以考慮將父類定義成乙個普通類,用虛方法來實現多型;如果弗雷中的方法沒有預設實現,父類也不需要被例項化,則可以將該類定義為抽象類。

3.介面

訪問修飾符

public,private,protected

internal:只能在當前專案中訪問,在同一專案中,internal與public許可權一樣;

能修飾類的只有public,internal;

*子類的訪問許可權不能高於父類,否則會暴露父類成員。

值傳遞&引用傳遞

值型別在複製的時候傳遞的是這個值本身;

引用型別在複製時傳遞的是對這個物件的引用;(例如位址)

p1,p2位址相同,改變其中乙個都會變。

**特殊情況

string s1="男";

string s2=s1;

s2="李四";

//結果s1為男,s2為李四;**因為字串的不可變性。

序列化&反序列化

序列化:將物件裝換為二進位制

反序列化:二進位制轉換為物件

作用:傳輸資料

[serializable]將序列標記為可以被序列化

binaryformatter bf=new =binaryformatter();

bf.serializable();

bf.deserializable();

部分類:partial;

密封類:sealed,不能被其他類繼承,但可以繼承其他類。

noteBook2 1 C 基礎第一天

cs 類檔案,類不佔記憶體,物件站記憶體 sln 解決方案檔案 csproj 專案檔案解決方案資料夾包含專案資料夾 console.writeline consile.readkey 可以用來暫停當前程式,等待使用者按下任意鍵繼續,且按下鍵顯示在專案中 注釋符 單行注釋符 多行注釋符 文件注釋符 用...

noteBook2 8 C 基礎第八天

命名空間 用於解決類的重名問題,可以看做 類的資料夾 可以認為類是屬於命名空間的 如果當前專案沒有這個類的命名空間,手動匯入三個方法 1.滑鼠點 2.alt shift f10 3.記住命名空間,手動輸入 引用類 在乙個專案中引用另乙個專案的類,兩步 1.新增引用 2.引用命名空間 值型別 引用型別...

noteBook2 12 C 基礎第十二天

path類 path.getfilename str 快速獲得str路徑下的檔名稱 path.getfilenamewithoutextension str 獲得檔名,不包括副檔名 path.getextension 獲取副檔名 path.getdirectoryname str 獲取所在資料夾名稱...