1. 程式人生 > >C#語言-04.OOP基礎

C#語言-04.OOP基礎

abs 指定 情況 實現接口 在一起 構造函數 運算符 相同 原因

      a. OOP:面對對象思想
          i. 類:是一種功能強大的數據類型,而且是面向對象的基礎
              1. 語法:訪問修飾符 class 類名{ //類的主體 }
              2. 成員變量:不以“函數”形式體現
                  a. 常量:代表與類相關的常量值
                  b. 變量:類中的變量
                  c. 事件:由類產生的通知,用於說明發生了什麽事件
                  d. 類型:屬於類的局部類型
              3. 成員函數:以“函數”形式體現
                  a. 方法:完成類中各種計算或功能的操作,不能和類同名、不能和類中其他成員同名
                  b. 屬性:定義類的值,並對它們提供讀、寫操作
                  c. 索引指示器:允許編程人員在訪問數組時,通過索引指示器訪問類的多個實例,又稱下標指示器
                  d. 運算符:定義類對象能使用的操作符
                  e. 構造函數:在類被實例化時首先執行的函數,主要是完成對象初始化操作,構造函數必須和類名相同
                  f. 析構函數:在類被刪除之前最後執行的函數,主要是完成對象結束時的收尾操作,必須和類名相同,並前加一個“
~”波浪線符號 ii. 構造函數:是類中一種特殊的方法,特點是 它的方法名與類名相同、沒有返回類型和主要完成初始化工作。 1. 隱式構造函數:默認的情況下,系統將會給類分配一個無參數的構造函數,並且沒有方法體,但要註意一旦類有了構造函數,就不再自動分配構造函數了 2. 無參構造函數:實例化時不需要給類的屬性賦值 3. 帶參構造函數:實例化時需要給類的屬性賦值,實例化時一定要使傳入的參數和帶參構造函數的參數列表相對應 4. 方法重載:是指在同一個類中,方法名相同,而參數類型和參數個數不同。在同一個類中,構造函數和變通方法都可以重載 iii. 封裝:指利用抽象數據類型將數據和數據的操作結合在一起,使其構成一個不可分割的獨立實體,盡可能隱藏內部的細節,只保留一些對外接口,使之與外部發生聯系,保存對象自身數據的完整性和安全性
1. 好處: a. 保證數據的安全性 b. 提供清晰的對外接口 c. 類內部實現可以任意修改,不影響其他類 iv. 繼承:建立類之間的關系,實現代碼的利用,方便系統的擴展,繼承必須符合 is a 的關系,被繼承的類稱為父類或者基類,繼承其他類的類稱為子類或者派生類 1. 子類構造函數 a. 隱式調用父類構造函數 i. 創建子類對象時會首先調用父類的構造函數,然後才會調用子類本身的構造函數,由於沒有指明要調用父類的哪一個構造函數,所有系統隱式地調用了父類的無參數構造函數 b. 顯式調用父類構造函數 i. 通過
base 關鍵字調用父類的構造函數進行初始化 ii. 註意:base 關鍵字調用父類的構造函數時,只能傳遞參數 iii. 如果父類沒有無參數的構造函數,那子類必須要使用 base 關鍵字來調用父類相應的構造函數,否則因為父類沒有無參構造函數的原因而報錯 2. 特性: a. 傳遞性:如果 A 繼承 B 和 B 繼承 C,則 A 也就繼承了 C ,A可以訪問 C 的成員 b. 單根性:一個類不能夠同時繼承自多個父類 3. 特點: a. 繼承模擬了現實世界的關系,OOP 中強調一切皆對象,這符合我們面向對象編程的思考方向 b. 繼承實現了代碼的重用 c. 繼承使得程序結構清晰,子類和父類的層次結構清晰 v. 多態:相同的方法調用可實現不同的實現方式 1. 使用虛方法實現多態 a. 創建父類變量,用子類對象實例化這個父類變量 b. 把父類類型作為參數類型,它的子類對象作為參數傳入 2. 裏式替換原則:子類可以替換父類並且出現在父類能夠出現的任何地方,且程序的行為不會發生變化,但是反過來,父類對象是不能替換子類對象的 a. Is 關鍵字:用於檢查對象和指定的類型是否兼容 b. as 關鍵字:用於兩個對象之間的類型轉換 3. 抽象方法是一個沒有實現的方法,通用在定義方法時增加關鍵字 abstract 可以聲明抽象方法 a. 語法:訪問修飾符 abstract 返回類型 方法名(); i. 註意:抽象方法沒有閉合的大括號,而是直接跟了一個分號“;”,也就是說,它沒有包括方法執行邏輯的方法體 b. 與虛方法的區別 虛方法 抽象方法 用 virtual 修飾 用 abstract 修飾 要用方法體,哪怕是一個分號 不允許有方法體 可以被子類 override 必須被子類 override 除了密封類外都可以寫 只能在抽象類中寫 4. 抽象類:含有抽象方法的類必然是抽象類 a. 語法:訪問修飾符 abstract class 類名; b. 抽象類不能被實例化 c. 抽象類不能是密封或者靜態的 i. 接口:接口繼承允許將一個方法的名稱和它的實現徹底的分離 1. 語法:[訪問修飾符] interface 接口名[:父接口名列表]{ //接口體 } 2. 註意: a. 接口僅僅提供成員的聲明,並不提供成員的實現 b. 接口成員只能是方法、屬性、索引指示器和事件,不能是常量、域、操作符、構造函數或析構函數,不能包含任何靜態成員 c. 接口成員聲明不能包含任何修飾符,接口成員默認訪問方式是public d. 接口類似於抽象基類,繼承接口的任何非抽象類型都必須實現接口的所有成員 e. 不能直接實例化接口

C#語言-04.OOP基礎