《你必须知道的.NET》第1章学习笔记
面向對象中幾個最基本的概念:類,對象,繼承,封裝和多態。
對象的出生,只是完成了對必要字段的初始化,其他數據要通過后面的操作來完成,如:屬性的賦值,通過方法獲取必要信息等。
對向可以分為值類型和引用類型。其分類依據是在運行時在內在中的位置,值類型位于線程的堆棧,而引用類型位于托管堆。兩者之間可以發生類型轉換,這個過程叫做裝箱與拆箱。
對對象的使用,就是外界對過調用對象中的方法與對名交互,從而達到改變對象狀態信息的過程。
對象的生存環境是CLR,CLR提供了對象賴以生存的托管環境,制定一系列規則,稱之為語法,在對名世界里建立起真正的秩序。面向對象的編程是以接口方式來抽象變化,從而形成體系。
訪問修飾符:
public:成員訪問沒有限制(無向)
protected:只有當前類或當前類的派生類可以訪問(縱向)
internal:訪問僅限于當前程序集(橫向)
private:訪問僅限于當前類(點向)
protected internal:protected和internal的交集(縱向和橫向)
同一方法,在不同的情況下,實現不同的操作,這就是多態的魅力。對名是多態主要包括兩種情況:1,接口實現;2,抽象類實現。
GC管理所有的托管對象,當內存回收執行時,GC檢查托管堆中不再被使用的對象(沒有任何引用的對象),并執行內在回收操作。
關于繼承:
繼承是面向對象三大要素之一(另外兩大是封裝和多態),是面向對象中類與類之間的關系,通過繼承,子類獲得父類的成員,子類也可以擴展父類的成員。繼承機制體現了面向對象技術中的復用性,擴展性和安全性,這面向對象開發與模塊開發的基本技術。
繼承按照實現方式一般可分類為:1,實現單繼承;2,接口多繼承
對于繼承的可見性問題,在.NET中是通過訪問權限(即訪問修飾符)來實現控制的。
在子類中實現父類中的虛方法,稱之為方法的動態綁定,這是面向對象的另一特性--多態的基本機制。
接口繼承的優點:通過接口繼承,實現了對象與行為的分離,
繼承讓我們輕松實現了代碼的復用與擴展,同時,通過重載(overload,同名不同參不同實現),覆寫(override,同名同參不同實現),接口實現等方式實現封裝變化,隱藏私有信息等面向對象的基本規則。
在子類中實現對父類的擴展和改寫,主要有兩種方式:1,在子類中添加新的方法(擴展);2,對父類中方法的重新改寫(改寫,即覆寫)
對象的創建會最先創建其最高一級的祖先類的字段,依次創建其它各級父類字段,最后創建自身字段。其次中方法表的創建,方法表的創建是類第一次被加載到AppDomain時完成的,在對象創建時只是將其附加成員的TypeHander指向方法列表在LoaderHeap上的地址,將對象與其動態方法關聯起來。因此是先有方法表再有對象的。方法表的創建也是父類在先子類在后。
明確以一幾點:
繼承是可傳遞的
子類可以調用父類的方法和字段,反之不然
虛方法實現覆寫操作
子類不光繼承父類的公有成員,同時也繼承了父類的私有成員,只是在子類中不能被訪問
new關鍵字在虛方法繼承中的阻斷作用
關注對象原則:調用子類還是父類的方法,取決于創建的對象是子類對象還是父類對象,而不是它的引用類型。
執行就近原則:對于同名字段或方法,編譯器按照其順序查找來引用,即先訪問離它創建近的。
實現繼承和接口繼承:
抽象類適合于有族層概念的類間關系,而接口最適合于為不同類提供通用功能
接口著重于CAN-DO關系類型,而抽象類型則偏重于IS-A式的關系
接口多用于定義對象的行為,抽象類多用于定義對象的屬性
如果預訂會出現版本問題,可以創建抽象類
值類型只能實現接口,不能繼承類
聚合還是繼承?
繼承關系的耦合度較高。
聚合關系可以分為三種:無,共享和復合,耦合度一次提高,但還是沒有繼承的高,可以說耦聚是一種HAS-A關系。
依賴關系表明當類2被修改,也會影響到類1。
面向對象程序設計的基本原則是:實現多聚合,少繼承,低耦合,高內聚的類間關系。
繼承的高耦合度會給編程帶來一定的不良反應,避免的方法有:將對象和行為分離抽象出接口,以聚合代替繼承實現更柔性的子類需求等。
Adapter模式簡介:
Adapter模式主要是將一個類的接口轉換為另一個接口,在不改變原有體系的條件下應對新的需求變化,通過引入新的Adapter類來完成對既存體系的擴展和改造。
Adapter模式的主要實現方式:
1,類的Adapter模式:通過引入新的類型來繼承原有類型,同時實現新加入的接口方法。
2,對象的Adapter模式:能過聚合方式實現對原有系統的擴展。
一些所謂有規則:
密封類不可以被繼承(什么是密封類)
繼承關系中關注的是共性,共性是層次復用的基礎,多態著則眼于特性,而特性是系統擴展的基點
實現單繼承,接口多繼承
面向對象程序設計的基本原則是:實現多聚合,少繼承,低耦合,高內聚的類間關系
控制繼承的層數
繼承是.NET運行機制的基礎技術之一,一切皆為對象,一切皆于繼承。
做到“理解繼承,關注封裝,品味多態,玩轉接口”是理解面向對象的起點。
關于封裝:
封裝是面向對象三要素之一,它為程序設計提供了系統與系統,模塊與模塊,類與類相互交互的實現手段。封裝隱藏類內部的具體實現,對外提供統一的訪問接口來操作內部數據成員。
通常系統需求中描述的核心名詞可以抽象為類,而對這些名詞驅動的動作,則相應的抽象為方法。
字段:通常為private,表示類的狀態信息。封裝的第一個原則就是字段定義為private。
屬性:通常為public,表示類的對外成員。屬性通過get,set訪問器來實現對屬性的讀寫控制,實質是自動生成get_屬性名和set_屬性名的方法。
索引器:它是一種含參屬性。
方法:方法表示類的行為,行為可分為內部行為(private)和外部行為(public),外部行為提供外部交互的接口。封裝的另一個原則就是有效的保護內部數據和有效的暴露外部行為一樣重要。
封裝的原則:
盡可能調用類的訪問器而不是成員
內部私有部分可以任意更改,但要確保外部接口部分的穩定
用屬性來實現對字段的讀寫控制
類的封裝是通常訪問權限來實現控制的
封裝的精華是封裝變化,將類中變化頻繁的部分封裝為獨立的部分,有利于充分的軟件復用和系統柔性
關于多態:
多態是指同一操作的不同實例,產生不同運行結果的機制。多態也是面向對象三要素之一。
多態根據實現方式可分為:
基類繼承式,在父類中聲明一個虛方法,在不同子類中可以有不同的實現(IS-A式的)
接口實現式,以接口約定的方式規定子類中方法的實現,具有更高的靈活性(CAN-DO式的)
多態的運行機制:
.NET的動態綁定機制成就了面向對象的多態機制。
靜態綁定,在編譯時就確定關聯,一般以方法的重載(overload)來實現。
動態綁定,又叫晚期綁定,是在運行期間通過檢查虛擬方法表來確定動態關聯的方法,一般以繼承和虛方法(virtual)在子類中重寫(override)虛方法來實現。將子類中共有的但卻容易變化的特征抽取為虛方法,并在父類中定義,而在子類中重寫。
關于接口:
接口是打開設計精要之門的鑰匙。接口是一種約束規則,表明能夠做什么(CAN-DO),不同的實現對象對同一操作可以有不同的實現方式。
基于接口的設計成就了面向對象思想中很多了不起的設計模式。
接口實質上是一種定義子抽象方法的類,該類僅提供了方法的定義,其實現由該接口的實現類來完成。實現類中對接口方法的實現實質就是一種重寫(override)。因此,從某種意義上來說:接口的本質是一個不能實例化的類,接口的實現機制就是多態。
接口的原則:
接口應該是一個個具有單一功能的小接口,通過接口的組合實現類的行為擴展。
禁止為已發布的接口添加新的成員。
接口不能實例化,接口的成員隱式為public。
良好的程序是面對抽象的編程而不是面向具體的編程。
《完》
轉載于:https://www.cnblogs.com/luckeryin/archive/2009/01/05/1369770.html
總結
以上是生活随笔為你收集整理的《你必须知道的.NET》第1章学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洛谷P1426 小鱼会有危险吗
- 下一篇: 常用字体名称中文对应英文