C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...
一.構造方法
當創建一個類時, 系統會自動創建一個默認的無參構造方法, 這個方法和類同名, 在創建對象的時候自動調用. 默認的構造方法里面什么也沒有, 重寫之后就可以在創建對象的時候同時搞點事情了.
構造方法主要負責對類里面的字段進行初始化。
1.1 格式:
public1.2 注意事項:
二.析構方法
2.1 使用: 對象銷毀之前都會自動調用析構方法
形象的來說, 我們玩游戲的時候把boss打死之后, boss會爆出各種裝備金幣,藍啊之類的, 這些方法我們就可以在析構方法里面寫;
2.2 語法:
~2.3 注意:
三.繼承
3.1 概念:
繼承用于創建可重用、擴展和修改在其他類中定義的行為的新類。 其成員被繼承的類稱為“基類”,繼承這些成員的類稱為“派生類”。 派生類只能有一個直接基類(C#中))。 但是,繼承是可傳遞的。 如果 ClassB 派生出 ClassC,ClassA 派生出 ClassB,則 ClassC 會繼承 ClassB 和 ClassA 中聲明的成員。
3.2 格式:
class學過構造方法之后, 就想給每個類都寫個構造方法,以便簡化初始化操作. 但是嘗試過后發現如果父類寫了帶參數的構造方法, 子類就會報錯了, 如何解決? base帶你飛.
3.3 繼承父類的構造方法:
孩子在創建對象的時候, 會先調用父類的構造方法, 如果父類是無參的就沒有影響, 但是如果父類有有參數的構造方法, 孩子就需要傳參數. 調用父類有參的構造方法有兩個方法:
3.4 注意:
子類在繼承的時候不管想不想都會繼承父類的所有字段和方法, 那么如果子類想用同樣的方法搞特殊呢? 那就要引入多態了.
四.多態
栗子: 就拿我們創建的僵尸們來說, 僵尸都會攻擊, 但是普通僵尸(小口咬), 路障僵尸(大口咬)和鐵桶僵尸(超大口咬)的攻擊方法不同, 這就是多態;
4.1重寫父類方法的多態:
1.在訪問修飾后面加上new關鍵字后重寫:// 父類的Attack方法那么問題來了, 我雖然重寫了父類的Attack方法, 但是我在某個地方還是想要使用父類的Attack方法的時候怎么辦呢?
加上base關鍵字:// 子類中 結果小結base:
4.2 virtual override 的多態
用這種方法來實現多態需要做兩件事情:
1> 將父類中要實現多態性的方法改成虛方法, 即在返回值類型前加關鍵字 virtual:// 僵尸父類 2>子類重寫父類的方法, 即將方法隱藏的關鍵字 new 改為 override.// 路障僵尸子類 多態的運行結果假如說現在有20個路障僵尸和10個鐵桶僵尸, 他們現在都要進行攻擊怎么實現? 借助數組唄. 那么問題又來了, 數組類型是什么? 數組中既有路障僵尸類又有鐵桶僵尸類, 那想著能不能定義成他們的父類普通僵尸類呢? 要解決這個問題就需要用到里氏轉換了.
4.3里氏轉換
里氏轉換的本質其實就是將父類強制轉換成子類.4.3.1 里氏轉換第一原則
子類對象可以直接賦值給父類對象// Main函數中4.3.2 里氏轉換第二原則
父類可以通過強制轉換的方式轉換成子類, 此時就可以調用子類中的成員了使用 as 關鍵字進行強轉即使不成功也不會報錯, 而是返回 null, 但是強行的 "ozb = (OstableZomby)zb" 轉換如果不成功的話, 程序就會報錯終止.
那么現在我們就是將數組問題解決了:
// Main函數中五.封裝
在C#中, 可以把類里面的這些字段進行私有化保護, 并為其添加共有屬性, 在類的外面不能通過對象直接訪問這些字段, 想要訪問只能通過訪問屬性的方式來完成, 這就是封裝. 具體操作在記錄屬性的時候其實就已經寫了, 這里就不再記錄了.
補充.結構體和類的區別:
=======================================================
思維導圖
總結
以上是生活随笔為你收集整理的C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记09--构造方法/析构方法/继承/多态/封装...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卓越性能代码_编程语言性能实测,Go比P
- 下一篇: github流程图_10月份Github