* 是一種模塊化編程方法,使代碼的重用性大大的增加。
* oop技術使得項目的設計階段需要的精力大大的增加,但是一旦對某種類型的數據表達方式達成一致,這種表達方式就可以沿用下去,直到這款應用的生命周期結束。
1、對象就是OOP應用程序的一個組成部分,這個組成部件封裝了部分應用程序,這部分程序可以是一個過程、一些數據或一些更抽象的實體。對象的類型在OOP中有個特殊的名稱叫做類。可以使用類來定義一個對象。
PS:術語“類”和“對象”常常被混淆,但簡單的來講就是,類是模板,而對象是模板做出來的產品
(我們將使用統一的建模語言UML語法來研究類和對象)
比如說PRinter和MyPrinter來用UML區別一下類和對象

2、屬性和字段
(1)可以通過屬性和字段訪問對象中包含的數據。這個對象數據可以用于區分不同的對象,因為同一個類的不同對象在屬性和字段中存儲了不同的值。
(2)屬性和字段是不同的,因為屬性不提供對數據的直接訪問。
(3)UML圖

a、可訪問性:+號表示公共成員,-號表示私有成員。
b、成員名
c、成員的類型
2、方法
(1)UML圖

a、其語法類似于字段和屬性,但最后顯示的類型是返回類型,在這一部風匯總還顯示了方法的參數。
b、in、out和inout他們用于表示數據流的方向,其中out和inout大致對應與學習筆記(五)中討論的C#關鍵字out和ref。in 大致對應于C#中不適用這兩個關鍵字的情景。
3、一切皆對象
4、對象的生命周期
(1)兩個重要的階段:
a、構造階段:對象最初進行實例化的時期。這個初始化過程稱為構造階段,由構造函數完成。
b、析構函數:在刪除一個對象時,常常需要執行一些清理工作,例如釋放內存,這由析構函數來完成。
(2)構造函數:
對象的初始化工程是自動完成的,但是,在初始化對象的過程中,需要初始化對象儲存的數據。構造函數就是用于初始化數據的函數。
所有的類有包括一個以上的構造函數,在這些函數中:有一個默認的構造函數,該函數沒有參數,名字和類名一樣。類可能還包括幾個帶參數的構造函數,稱為非默認的構造函數。代碼可以使它們以許多的方式實例化對象。
在C#中,用new關鍵字來調用構造函數。
構造函數與字段和屬性一樣,可以是共有或私有的。在類外部的外碼不能使用私有構造函數來實例化對象,而必須使用公共的構造函數。
(3)析構函數
不應該依賴析構函數來書房對象實例所使用的函數,因為在不再使用某個對象后,該資源會長時間被該對象占用。如果所使用的資源非常重要,這樣做就有可能出問題。(后面的會有解決的辦法)。
4、靜態和實例類函數
(1)類還有靜態成員,靜態成員可以在類的實例之中共享,在使用靜態成員的時候甚至不需要實例化對象。
UML圖表示法:

在UML圖中,類的靜態成員用下劃線表示。
(2)靜態構造函數
使用類中的靜態成員時,需要預先初始化這些成員。使用靜態構造函數可以執行這種初始化任務,一個雷只能有一個靜態構造函數,但是構造函數不能帶有訪問修飾符,也不能帶任何參數。
靜態構造函數不能直接調用,只能在下述情況中執行:
a、創建包含靜態構造函數的類實例時
b、訪問含靜態構造函數的類的靜態成員時
(3)靜態類
如果我們想類只含有靜態成員,一種簡單的方法就是使用靜態類,而不是把類的構造函數設置為私有,靜態類只能包含靜態成員。
1、接口
(1)接口是把公共實例(非靜態)方法和屬性組合起來,以封裝特定方法的集合。
(2)注意,接口不能單獨存在,不能像實例化一個類那樣實例化接口。另外,接口不能包含實現其成員的任何代碼,而只能定義成員本身。實現過程必須在實現接口的類中完成。
(3)UML語言在對象上實現接口。(一般接口的名稱一般用大寫字母I開頭)

(4)一個類可以支持多個接口,多個類也可以使用同一個接口。
(5)在發布接口之后(比如說我們使用的MATLAB),即接口可以用于其他開發人員或終端用戶后,最好不要修改它。如果以后做了修改,也許是升級了底層的代碼,但是也許會導致使用者不能正確運行接口,甚至失敗,我們應創建一個新的接口,來擴展舊接口,例如可以包含一個版本號。
(6)支持IDisposable接口的對象必須實現其Dispose()方法,即他們必須提供這個方法的代碼。當不再需要某個對象的時候就調用這個方法,釋放重要的資源,負責,該資源會等到析構函數的時候才釋放。
C#允許使用一種可以優化使用這個方法的結構。using關鍵字可以在代碼塊中初始化使用重要資源的對象,會在這個代碼塊的末尾自動調用Dispose()方法,用法如下:
<ClassName><VariableName> = new <ClassName>()……using(<VaribaleName>){ ……}或者也可以:
using(<ClassName><VariableName> = new <ClassName>()){ ……}可以在using代碼塊中使用變量<VariableName>,并在代碼塊的末尾自動刪除(在代碼塊執行完畢后,調用Dispose())。
2、繼承
(1)任何類都可以從另一個類中繼承,這就是說,這個類擁有他繼承的類的所有成員。在OOP中,被繼承(派生)的類成為父類(基類)。
Attention:注意C#中的對象只能直接派生于一個基類。
(2)UML圖中來表示基類。

用一個箭頭來表示繼承的關系。
(2)派生類不能訪問基類的私有成員,但是可以訪問其公有和受保護的成員。而外部代碼只能訪問公有成員,而不能訪問私有成員還有受保護成員。
(3)基類可以定義為抽象類,抽象類不能夠直接實例化,要使用這個類,必須繼承這個類,抽象類中有抽象成員,這些成員在基類中沒有實現代碼,這些代碼的實現是在派生類中提供。
Attention:接口也可以繼承自其它接口,但與類不同的是,接口可以繼承多個基接口。
(1)多態性是指某個派生類型的變量可以賦給基本類型的變量,而不用進行強制類型轉換就可以通過這個變量來調用基類的方法,但最終的結果是調用了派生類中的方法來實現代碼。
(2)基本類型轉換成派生類型的時候需要使用強制類型的轉換。
(3)C#中,所有的類都派生于Object這類。
(4)接口的多態性:盡管接口不能實例化,但是可以建立接口類型的變量,然后就可以在支持該接口的對象上使用這個變量訪問該接口提供的方法和屬性。
4、對象之間的關系:
包含、集合
5、運算符重載
簡而言之,就是重新定義C#中已有的運算符的法則。
6、事件:
對象可以激活事件,作為他們處理的一部分。暫時可以理解為中斷、
7、引用類型和值類型
換句話說就是指針和變量。
新聞熱點
疑難解答