今天繼續分享我的閱讀《LEARNING HARD C#學習筆記》知識點總結與摘要二,仍然是基礎知識,但可溫故而知新。
七.面向對象
三大基本特性:
封裝:把客觀事物封裝成類,并隱藏類的內部實現細節,僅開放相關的訪問屬性、方法等
繼承:通過繼承可以復用父類的代碼;
多態:1.允許將子對象賦值給父對象,2.同方法在不同的對象上有不同的實現方式;
子類初始化順序:初始化類的實例字段à調用父類構造函數à調用子類構造函數;
重寫:父類聲明為virtual或abstract的類成員(屬性、方法),在子類繼承時必需使用override關鍵字進行重實現(虛方法視情況可不重寫)。重寫一般發生在父類與子類之間;
注意:虛擬成員或抽象成員不能是私有的,且重寫時不能改變其訪問修飾符(即:虛擬成員或抽象成員若為public,重寫時不能改為PRotected,反之一樣是不行的)
重載:相同的方法名稱不同的形參類型或個數(注意:返回值類型不能做為重載的依據);
隱藏(覆蓋):子類使用new關鍵字定義父類同名的方法,即可隱藏父類同名的方法,隱藏后,子類外部不能直接訪問父類隱藏的方法,若需訪問,必須將子類型強制轉換成父類型才能正常訪問;
所有類的最高層父類都是object類,即所有類都間接派生于object類;
八.接口
九.接口與抽象類的區別
1.接口定義關鍵字為:interface,而抽象類定義關鍵字為:abstract
2.接口不能定義字段、構造函數、析構函數,不能使用任何訪問修飾符(包含static,sealed,virtual等),而抽象類不受限制;
3.接口允許多重繼承,而抽象類僅支持單繼承;
4.接口一般用來定義通用的行為規范,指示所有繼承的類必需具備這些行為,表現為:Can Do,而抽象類一般用來對一類對象的抽象進行描述,指示所有繼承的類都屬于該抽象類,并具備抽象類的所有特性,表現為:IS;
十.委托
1.委托是一種類型delegate,可以理解為對方法的包裝,它使得可以將方法作為參數被傳遞,相當于C++中的函數指針;
2.委托的定義與方法的定義類似,只是多了一個delegate關鍵字,定義的語法如下:
訪問修飾符 delegate 返回類型 委托名(形參列表);
3.實例化委托必須保證被委托的方法的方法簽名(形參個數、順序、類型)以及返回類型與委托定義相同;
4.委托鏈:+=表示添加方法到委托鏈中,-=表示從委托鏈中移除方法;
事件也是一種委托類型,定義時必需先定義委托類型,然后才能定義事件,事件的定義語法如下:
訪問修飾符 event 委托類型 事件名;
事件通過+=訂閱事件,-=取消訂閱
十一.參數傳遞
默認情況下,值類型在方法中是按值傳遞,即將實參的值復制給形參,兩者中任何一個的值改變不會改變另一個的值;
引用類型在方法中是按引用傳遞,即實參將變量的的引用地址傳遞給形參,兩者均指向同一個對象,任何一個的值改變,則另一個也會變化;(字符串雖為引用類型,但由于其特殊性,默認情況下,在方法中是按值傳遞)
通過添加rel或out關鍵字來顯式實現參數(不論任何類型)按引用類型傳遞,其中使用rel關鍵字時,實參必需先初始化,而out關鍵字則沒有此要求;
十二.泛型
泛型代表的就是通用類型,它可以代表任意類型,使類型參數化,從而實現同一個方法可以操作不同的類型的目的;
泛型解決了類型之間裝箱與拆箱的問題;
浮型約束采用where 關鍵字,如:where T:class,約束是為了將泛型的類型具體化。
約束種類如下:
引用類型約束(T:class),確保傳遞的類型實參必須為引用類型;
值類型約束(T:struct),確保傳遞的類型實參必須為值類型(不包括可空類型);
構造函數約束(T:new()),確保傳遞的類型實參必須有公共的無參構造函數,此約束適用所有非靜態、非抽象的包含無參構造函數的類型(值類型與引用類型),如果有多個約束,則此約束必須放在最后面;
轉換類型約束(T:基類名,T:接口名,T:U),確保傳遞的類型實參必須是繼承該約束的類或接口;
組合約束,包含多個約束;
新聞熱點
疑難解答