多型(讓乙個物件能夠表現出多種的狀態,即型別)
三種方法:
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 獲取所在資料夾名稱...