.NET 面向对象基础
今天看大話設計模式,看到一些基礎知識,記錄下來。
?
對象:一切事務皆對象,對象是一個自包含的實體,用一組可識別的特性和行為來標識。好處,可維護、可擴展、可復用、靈活。
面向對象編程:其實就是針對對象來進行編程的意思。
類:類就是具有相同 的屬性和功能的對象的抽象的集合。
構造函數:對類進行初始化,與類同名,無返回值,在new時調用。
重載:提供了創建同名的多個方法的能力,但這些方法需使用不同的參數類型。
屬性:屬性是一個方法或一對方法,但在調用他的代碼來看他是一個字段,即屬性適合于以字段的方式使用方法調用的場合
字段:是存儲類要滿足其設計所需要的數據,字段是與類相關的變量。
get:get訪問器返回與聲明的屬性相同的數據類型,表示的意思是調用時及可以得到內部字段的值或引用。
set:set訪問器沒有顯示設置參數,但他有一個隱式參數,用關鍵字value表示,他的作用是調用屬性時可以給內部的字段或引用賦值。
封裝:每個對象都包含他能進行操作所需要的所有信息,這個特性成為封裝,因此對象不必依賴其他對象來完成自己的操作。
? ? ? ? 1.減少耦合。
? ? ? ? 2.類內部的實現可以自由修改。
? ? ? ? 3.類具有清晰的對外接口。
繼承:對象的繼承代表了一種? ’is-a‘ 的關系,如果兩個對象A和B,可以描述為 ‘B是A’,‘則表名B可以繼承A’。繼承者還可以理解為是對被繼承者的特殊化,因為他出了具備被繼承的特性外,還具備自己獨有的個性。繼承定義了類如何相互關聯,共享特性。繼承的工作方式是,定義父類和子類,或叫基類和派生類,其中子類繼承父類的所有特性。子類不但繼承了父類的所有特性,還可以定義新的特性。子類從他的父類中繼承的成員有方法、域、屬性、事件、索引指示器,但對于構造方法,有一些特殊性,他不能被繼承,只能被調用。對于調用父類的成員,可以用base關鍵字。
優點:繼承使得所有子類公共的部分都放在了父類,使代碼得到了共享,避免了重復,另外,繼承可使得修改或擴展繼承而來的實現都比較容易。
缺點:父類變,子類不得不變,顯然是一種類與類之間的強耦合關系。繼承會破壞包裝,父類實現細節暴露給子類。
? ? ? ? 如果子類繼承父類:1子類擁有父類非private的屬性和功能
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.子類具有自己的屬性和功能,即子類可以擴展父類沒有的屬性和功能。
? ? ? ? ? ? ? ? ?3.子類還可以以自己的方式實現父類的功能(重寫)。
重寫:父類將成員聲明為虛擬的,通過在成員的返回類型之前添加virtual關鍵字來實現,子類可選擇override關鍵字,將父類實現替換為他自己的實現,這就是方法重寫override。
多態:多態表示不同的對象可以執行相同的動作,但要通過他們自己的實現代碼來執行(對象聲明是父類,實例化是子類,這才能實現多態)。原理:是當方法被調用時,無論對象是否被轉換為其父類,都只有位于對象繼承鏈最末端的方法實現會被調用,也就是說,虛方法是按照其運行時類型而非編譯時類型進行動態綁定調用的。
重構:
抽象類:代表一個抽象的概念,它提供一個繼承的出發點,當設計一個新的抽象類時,一定是用來繼承的,所以,在一個以繼承關系形成的等級結構里面,樹葉節點應當是具體類,而樹枝節點均應當是抽象類。
? ? ? ? ? ? 1.不能被實例化。
? ? ? ? ? ? 2.抽象方法是必須被子類重寫的方法。
? ? ? ? ? ?3.如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其他一般方法。
接口:接口是把隱式公共方法和屬性組合起來,以封裝特定功能的一個集合,一旦實現了接口,類就可以支持接口所指定的所有屬性和成員。聲明接口在語法上與聲明抽象類完全相同,但不允許提供接口中任何成員的執行方式。(所以接口不能實例化,沒有構造方法、字段、修飾符、聲明靜態或虛擬,實現接口的類就必須實現接口中的所有方法和屬性)
抽象類可以給出一些成員的實現,接口不包含成員的實現;抽象類的抽象成員可被子類部分實現,接口的成員需要類完全實現;一個類只能繼承一個抽象類,但可實現多個接口。
類是對對象的抽象;抽象類是對類的抽象;接口是對行為的抽象;
如果行為跨越不同的種類,可使用接口;對于一些相似的類對象,用繼承抽象類。
從設計角度講,抽象類是從子類中發現了公共的東西,泛化出父類,然后子類繼承父類,而接口值根本不知子類的存在,方法實現還不確認,預先定義。
?
裝箱拆箱:裝箱就是把值類型打包到Object引用類型的一個實例中。拆箱就是,從對象中取出值類型。
數組:優點,在內存中連續存儲,可以快速的從頭到尾遍歷、修改元素;缺點是,創建時指定數組變量的大小,在兩個元素間添加元素也比較困難。
集合(ArrayList):容量是arraylist可以保存的元素數,默認為0,隨著元素天際,容量會根據需要重新分配自動添加,使用整數索引可以訪問集合中的原色。大小可按需動態增加,插入等操作方便。(不是類型安全,的,存取值類型要裝箱拆箱)。通常情況下建議使用泛型集合,因為這樣可以獲得類型安全的直接優點而不是從基集合類類型派生并實現類型特定的成員。此外,如果集合元素為值類型,泛型集合類型的性能通常優于對應的非泛型集合類型(并由于從非泛型基集合類型派生的類型),因為使用泛型時不必對元素進行裝箱。
泛型:泛型是具有占位符(類型參數)的類、結構、接口和方法,這些占位符是累、結構、接口和方法所存儲或使用的一個或多個類型的占位符。泛型集合類可以將類型參數用做他所存儲的對象類型的占位符;類型參數作為其字段的類型和其方法的參數類型出現。
委托:委托是對函數的封裝,可以當作給方法的特征指定了一個名稱。委托是一種引用方法的類型,一旦為委托分配了方法,委托將于該方法具有完全相同的行為。用delegate聲明。
事件:是委托的一種特殊形式,方法生有意義的事情時事件對象處理通知過程。(就是觀察者模式在.NET中的一種實現方式)在發生其他類或對象關注的事情時,類或對象可以通過事件通知他們。用even聲明。
? public delegate void xxHandler(); 聲明委托xxHandler
? public even xxHandler xxEvent(); 聲明事件xxEvent,他的事件類型是委托?xxHandler
? ? ??
?
轉載于:https://www.cnblogs.com/luanxm/p/10263179.html
總結
以上是生活随笔為你收集整理的.NET 面向对象基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中string.equalsIg
- 下一篇: 【原创】大叔经验分享(6)Oozie如何