程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> .NET OOP總結筆記

.NET OOP總結筆記

編輯:關於C#
 

一 面向對象思想起源於現實世界的對事物的認識和思考方式:
1 世界由對象組成
2 為了交流 認識 管理世界上的對象,對具有共性的對象進行分類
二 類和對象的概念
對象 : 具有明確定義的屬性和行為的具體個體,是類的具體實例
類 : 對一組具有共同的屬性和行為的對象的描述
從程序的角度來說 類是一種自定義的復雜的復合型的數據類型
是對一組特征(字段)和行為(方法)的封裝
三 類的成員
創建類的過程實際上是定義一種新的數據類型,在類的定義階段,計算機
並不會為類分配內存,內存的分配是在創建對象時完成的。所以在類的定義
過程中類的成員只包括對字段(特征)、屬性(字段的訪問器)和方法(行為)
的定義,而不能包括具體的執行代碼,一切執行代碼應當在方法中封裝。
1 字段:一個變量或一個對象,用於存儲對象的某一具體特征
2 屬性:一種特殊的語法結構,用於在嚴密封裝中作為字段的訪問器
3 方法:一段命名了的可執行代碼,用於表示對象的某一行為
4 構造方法 一種特殊的方法 用於在創建對象時初始化對象
四 類的定義(語法)
類的成員 默認情況下是私有的
class 類名{
//字段
//屬性
//方法
//構造方法
}
五 方法的定義(語法)
1 方法是一段命名了的一段代碼。方法由兩部分組成:方法體和方法聲明
方法體:被一對大括號封裝的具體可執行代碼,構成方法的主體。
方法聲明:又叫方法簽名,是對方法體的標識和說明
2 語法
訪問修飾符 返回類型 方法名(參數列表) //方法聲明
{
//方法體
}

方法名:該段可執行代碼的名字,在調用執行該方法時通過方法名引用
參數列表:調用方法時向方法內傳入的數據
返回類型:調用方法後返回的結果類型,如果標識為void則不返回值
訪問修飾符:標識方法的可訪問范圍
六 創建對象
1 使用new關鍵字創建新的對象,其過程如下
1) 如果是第一次創建類,則首先將類定義加載到內存中
2) 根據類定義為對象在堆中分配內存空間
3) 使用默認值初始化對象的字段
4) 調用構造方法初始化對象
2 實例成員和靜態成員
a 靜態成員使用static標識,所有靜態成員直接屬於類,在第一次調用時
初始化,對靜態成員的調用通過類名點的形式進行。靜態方法內可以直接
訪問本類的其他靜態成員但不能直接訪問本類的非靜態成員
b 實例成員不使用static標識,屬於具體的對象(依賴於實例),在對象創
建時分配內存和初始化。所以實例成員只有在對象創建之後才存在,實例
成員直接屬於並依賴於該對象。對實例成員的調用必須通過對象點的形式
進行,實例方法中可以直接訪問本類的任何其他靜態或實例成員。
3 this 關鍵字
用於表示對當前對象的一個內部引用,不能再靜態方法中使用this關鍵字
七 屬性
屬性是字段的封裝器
1 語法
訪問修飾符 類型(與字段類型相同) 屬性名{
get{//返回字段的值}
set{//設置字段的值,關鍵字value用於指代賦予屬性的值}
}
2 屬性的使用
屬性的使用與字段的使用方法相似,通過對象名點屬性的形式調用屬性
可以使用賦值符號對屬性賦值。也可以直接象使用字段一樣使用屬性的值
3 屬性的分類
只有set的屬性為只寫屬性
只有get的屬性為只讀屬性
同時具有set和get的屬性為讀寫屬性
八 構造方法
構造方法是一種特殊的方法,用於在創建對象時初始化對象,構造方法僅能在
創建對象時使用。
構造方法的特點
a 與類同名 沒有返回類型
b 如果未在類中定義顯式的構造方法,則編譯器自動向類中添加默認構造方法
c 默認構造方法 沒有參數
d 如果在類中顯示定義了構造方法,則編譯器不再添加默認構造方法
e 構造方法可以重載
九 方法的重載
在一個類中,同名方法因參數不同而出現多個版本的情況稱為重載
1 重載的判定:同名且參數不同,參數不同是指參數的個數不同,或參數的類型不同
2 重載方法的調用:在調用重載方法時,根據傳入方法的參數不同,會尋找最為合適
的方法版本執行,必要時可能發生自動的類型轉換.
十 引用類型和值類型
1 值類型的值直接存儲在變量所在的內存空間中。
2 引用類型的變量空間中指存儲對實際對象的引用,而實際的對象保存在內存堆中
3 類 數組 接口 屬於引用類型
4 基本類型 枚舉 結構屬於值類型
十一 枚舉
枚舉是一種自定義的限定了取值范圍的數據類型
語法
訪問修飾符 enum 枚舉名
{
值,.... //結尾沒有分號
}

枚舉類型的使用
枚舉類型 變量名 = 枚舉類型.枚舉值
例如 Gender sex = Gender.Male;
類型轉換
枚舉值轉int (int)枚舉值
枚舉值轉string 枚舉值.ToString()
string轉枚舉值 (枚舉類型)(Enum.Parse(typeof(枚舉類型),字符串))

十二 結構
結構是一種自定義的復雜的復合的數據類型,結構屬於值類型
語法
訪問修飾符 struct 結構類型名{
//成員 (字段 屬性 方法 構造方法)
}
與類的區別
結構可以實現接口,但不能被繼承
結構可以有構造方法,但不能定義無參的構造方法
結構值類型
結構中未定義屬性時,結構變量可以不new直接使用
結構中的字段定義時不能初始化

十三 引用類型和值類型作為參數傳遞
c#中 參數傳遞有三種類型
值傳遞
引用傳遞
out傳遞
值類型的值傳遞:傳遞值的副本給被調方法,
在被調方法中對副本的修改,對原方法中的值無效
值類型的引用傳遞:傳遞實參的地址給形參,
所以對形參的修改,實際上是對實參的修改

引用類型的值傳遞
引用類型的引用傳遞
十四 繼承
繼承的好處:能夠有效地避免代碼冗余
繼承的語法:
訪問修飾符 子類名 :父類名{
}
繼承的特性:
單根性:每個類都只能有一個父類,所有類都直接或間接的繼承自object
傳遞性:子類會繼承父類的成員,並可以將這些成員傳遞給自己的子類
哪些成員不能繼承
構造方法不繼承
私有成員不繼承
一個新的訪問修飾符
protected:用protected修飾的成員只能被子類繼承,不能被非子類訪問
子類的構造方法
1 子類的構造方法執行前必須先調用父類的構造方法
2 可以使用子類構造方法([參數]):base([參數])的形式顯式調用
父類的任一版本的構造方法
3 如果子類構造方法未顯式調用父類構造方法,則默認調用父類無參的構造方法
十五 多態:一個方法多種形態
多態的兩種表現
重載:在一個類中 同一方法因參數不同而出現多個版本
重寫:在繼承關系中,子類對從父類繼承來的方法進行改寫
重寫時必須保持方法聲明不變,使用override關鍵字
哪些方法可以重寫
普通方法:不能被重寫
虛方法: 可以被重寫
抽象方法:必須被重寫
兩個關鍵字
virtual:用於聲明虛方法,虛方法有自己的實現,在子類中可以被重寫
abstract:
1、用於修飾類時 聲明一個抽象類,只能被繼承不能實例化
2、用於修飾方法時,聲明一個抽象方法,抽象方法沒有方法體,
以分號結尾,必須在子類中被實現(重寫),抽象方法必須
定義在抽象類中
3、抽象方法與抽象類的關系:抽象類中不一定有抽象方法,但有
抽象方法的類一定是抽象類
4、abstract不能和static private 一起使用
多態應用
重寫
裡氏替換:父類引用可以指向子類對象,但子類引用不能只想父類對象
後期綁定: 編譯階段看引用,執行階段看對象
成員隱藏
new關鍵字
當子類中定義的成員隱藏父類繼承來的成員時
對於子類對象,如果用父類引用指向,則調用
時調用的是從父類繼承的成員,子類引用指向時
調用的是子類中定義的成員
Equals方法:用於做任意兩個對象的等值判斷

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved