C#拾遺之類的OOP特性

來源:互聯網
上載者:User

標籤:程式設計語言   oop   c#   .net framework   class   

       OOP概述

       OOP不僅是一項具體的軟體開發技術,而且是一整套關於如何看待軟體系統與現實世界關係,以何種觀點來研究問題並進行求解以及如何進行系統構造的軟體方法學。

       OOP方法的出現彌補了傳統方法的不足,首先著眼於實際問題中所涉及的對象,包括各種客觀實體及事件等,為解決問題設計所需的,各種對象以及對象的屬性,必要的操作和各個對象之間的關係,從而構建出對象的結構和為解決問題需要執行的事件序列(俗稱指令碼)。通過各個對象之間的訊息串連,建立所需的功能。

       OOP方法中類的定義充分體現了抽象資料類型的思想,基於類的體繫結構可以把程式的修改局部化。特別是一旦系統功能需要修改時,主要修改類中的某些操作,而類所代表的對象基本不變,保持整個系統仍然穩定。

       OOP方法的優點:

       (1)與人類習慣的思維方式一致。人的認識過程是從一般到特殊的漸進思維過程。OOP的方法順應了這個規律,從尋找要求解的對象“是什嗎?”開始,認識事物屬性及其本質規律,主觀隨意性受到限制。而傳統方法是從“怎樣做?”開始,主觀隨意性較大。

       (2)穩定性好。傳統方法主要面向過程,完全基於系統的功能和效能分析。當功能需求發生變化時,將引起對軟體整體結構的修改。OOP方法以“對象”為中心。在分析,研究對象及其屬性的過程中,根據其內在規律建立求解模型。基於這種方法建立的軟體系統,不管外部環境或功能需求如何變化,而對象內在的規律不變,因而不會引起軟體結構的整體變化,所以系統是穩定的。

       (3)可重用性好。繼承是OOP方法的一個重要機制。用OOP方法設計的系統,其基本對象類可以被其他新系統重用。通常這是通過一個包含類和子類階層的類庫來實現的。

       (4)可維護性好。由於穩定性較好,即使進行局部修改,也不影響全域:由於對象具有封裝性和資訊隱藏機制,使得程式便於修改:系統功能的擴充,往往是通過在原有類的基礎上派生一些新的子類來實現,易於融會貫通:同樣,由於衍生類別繼承原有類的特性,系統也易於測試和調試,從而使系統具有較好的可維護性。

       (5)表示方法的一致性。傳統的結構化分析和設計方法中存在截然不同的表示方法。例如在分析階段採用資料流程圖表示,在設計階段則採用結構圖的表示方法。OOP方法在系統的整個開發過程中,從OOA到OOD,直到OOP,採用一直的表示方法,從而加強了分析,設計和編程之間的內在一致性,並且改善了使用者,分析員,設計員以及程式員之間的資訊交流。

       類的OOP特性

       類的封裝

       如果使用者希望確保一個類不被作為基類使用,那麼就在定義這個類時使用sealed關鍵字。唯一的限制是抽象類別不能作為封閉的類使用,因為抽象類別的本質決定它們必須被作為基類使用。封閉類的作用是防止意外的派生操作。具體地說,因為編譯器確定這個類沒有任何衍生類別,所以可以將封閉執行個體上的虛函數成員調用轉換為非虛函數調用。

       例題,使用關鍵字sealed修飾類進行一系列的程式調試有如下的結果

       類的繼承

       在C#程式設計語言中,除了密封類以外,絕大部分的類都可以繼承。在OOP編程體系中,繼承是一個重要的概念,對於類而言,所謂繼承,就是子類包含父類的資料結構和行為方式,包括欄位,屬性,方法和事件。儘管在子類本身的定義中沒有包含這些定義,但仍然可以使用這些父類成員。

       在類的繼承中,被繼承的類叫做基類或父類,繼承的類叫做衍生類別或子類。

       當一個類從另一個派生出來時,衍生類別就自然具有基類資料成員,屬性成員和方法成員等,基類定義中這些成員的代碼,已不需要在衍生類別定義中重寫,在衍生類別的定義中,只需編寫基類定義中所不具有的代碼即可。這樣,既提高了代碼的重要性,也提高程式設計的效率,又為程式設計中的特別需要提供了編寫代碼的自由空間,從而提高了已有程式設計成果的可擴充性。

        在C#中,類的繼承遵循以下規則:

        (1)衍生類別只能繼承一個基類

        (2)衍生類別自然繼承基類的成員,但不能繼承類的建構函式成員

        (3)類的基礎可以傳遞,假設C類繼承B類,B類繼承A類,那麼C類具有B類和A類的成員,在C#中,Object類是所有類的基類,也就是所有的類都具有Object類的成員。

        (4)衍生類別是對基類的擴充,衍生類別定義中可以聲明新的成員,但不能消除已繼承的基類成員。

        (5)基類中的成員聲明時,不管其是什麼存取控制方式,總能被衍生類別繼承,存取控制的不同只決定衍生類別成員是否能夠訪問基類成員。

        (6)衍生類別定義中如果聲明了與基類同名的成員,則基類的同名成員將被覆蓋,從而使衍生類別不能直接存取同名的基類的成員。

        (7)基類可以定義虛方法成員等,這樣衍生類別能夠重載這些成員以表現類的多態性。

        衍生類別通常定義的格式為:

        存取控制修飾符  class  衍生類別名稱: 基類名稱

        {

              類體

        }

        存取控制修飾符可以是public,protected和private。通常都是用public以保證類的開放性,並且public可以省略,因為類定義的存取控制預設為public。“:基類名稱”,表示所繼承的類。

        基類與衍生類別定義完成後,用衍生類別聲明的對象將包含基類的成員(除了建構函式),因此,衍生類別對象可以直接存取基類成員。在建立衍生類別對象時,調用建構函式的順序是先調用基類建構函式,再調用衍生類別的建構函式。以完成為資料成員分配記憶體空間並進行初始化的工作。

        向基類建構函式傳遞參數,必須通過衍生類別的建構函式實現,格式為:

        public 衍生類別建構函式名(形參列表) base (向基類建構函式傳遞的實參列表)

        {   }

        "base"是C#關鍵字,表示調用基類的有參數建構函式,傳遞給基類建構函式的“實參列表”通常包含在衍生類別建構函式的“形參列表”中。

        在上述的程式例題中去掉sealed關鍵字,則就是一個類的繼承的程式碼例題。

        類的多態

        在類的繼承中,C#允許在基類與衍生類別中聲明具有同名的方法,而且同名的方法可以有不同的代碼,也就是說在基類與衍生類別的相同功能中可以有不同的實現方法,從而為解決同一問題提供多種途徑。

        多態性就是指在程式運行時,執行的雖然是一個調用方法的語句,卻可以根據衍生類別對象的類型不同完成方法的不同的具體實現。

        在C#可以通過多種途徑實現多態性。

        (1)虛方法

        在衍生類別中用new關鍵字聲明與基類同名的方法的格式為:

        public new 方法名稱(參數列表)

        {   }

        在基類中的聲明格式如下:

        public virtual 方法名稱(參數列表)

        在衍生類別中的聲明格式為:

        public  override 方法名稱(參數列表)

        在衍生類別中聲明與基類同名的方法,也叫方法重載。在衍生類別重載基類方法後,如果想調用基類的同名方法,可以使用base關鍵字。如果基類與衍生類別都有一個無參數Show方法。

        在基類中的Show方法的聲明格式:Show()

        在衍生類別中的Show方法的聲明格式:base Show()

        (2)抽象類別與抽象方法

        為了實現多態,必須在基類聲明虛方法,但有時基類中聲明的虛方法無法實現具體的功能。這時需要在基類中聲明抽象方法。抽象類別是指基類的定義中聲明不包括任何實現代碼的方法,實際上就是一個不具有任何具體功能的方法。這樣的方法唯一的作用就是讓衍生類別重寫。

        在基類定義中,只要類體中包含一個抽象方法,就將該類稱為抽象類別,在抽象類別中也可以聲明一般的虛方法。

        1聲明抽象類別與抽象方法

        聲明抽象類別與抽象方法均需使用關鍵字abstract,格式為:

        public  abstract  class 類名稱

        {

              public abstract 傳回型別 方法名稱 (參數列表) 

        }

        抽象方法不是一般的空方法,抽象方法聲明時,沒有方法體,只在方法後跟一個分號。

        2重載抽象方法

        當定義抽象類別的衍生類別時,衍生類別自然從抽象類別繼承抽象方法成員,並且必須重寫抽象類別的抽象方法,這是抽象方法與虛方法的不同,因為對於基類的虛方法,其衍生類別可以不必重寫   。重寫抽象類別方法必須使用override關鍵字。

        重載抽象方法的格式為:

        public  override 傳回型別 方法名稱(參數列表)

        {  }

        其中 ,方法名稱與參數列表必須與抽象類別中的抽象方法完全一致。

        對於這方面的程式例題在以後的具體執行個體再做充分的分析。

  

       

 

 

 

 

 

 

C#拾遺之類的OOP特性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.