C#物件導向基礎

來源:互聯網
上載者:User

標籤:blog   http   com   get   使用   資料   

Public 表示它所修飾的類成員可以允許其他任何類來訪問,俗稱公有的。

Private 表示只允許同一個類中的成員訪問,其他類包括它的子類無法訪問,俗稱私人的。

Protected 表示繼承時子類可以對基類有完全訪問權,也就是說,用protected修飾的類成員,對子類公開,但不對其他類公開。

如果在類中的成員沒有加修飾符,則被認為是private。

通常欄位是private,即私人變數,而屬性是public,即公有變數。

屬性名稱一般首字母大寫,欄位一般首字母小寫或前加“_”。

 

構造方法又叫建構函式,其實就是對類進行初始化。構造方法與類同名,無傳回值,也不需要void,在new時候調用。

所有的類都有構造方法,如果不編碼則系統預設產生空的構造方法,若有定義的構造方法,則預設的構造方法就會失效。

 

方法重載提供了建立同名的多個方法的能力,但這些方法需要使用不同的參數類型或參數個數有所不同。

 

屬性是一個方法或一對方法,但在調用它的代碼來看,它是一個欄位,及屬性適合一欄位的方式使用方法調用的場合。欄位是儲存類要滿足其設計需要的資料,欄位是與類相關的變數。

 

物件導向的三大特徵:封裝、繼承、多態

封裝的好處:第一、良好的封裝能夠減少耦合。

                     第二、類內部的實現可以自由的修改。

                     第三、類具有清晰的對外介面。

 

繼承 對象的繼承代表了一種‘is-a’的關係,如果兩個對象A和B,可以描述為‘B是A’,則表明B可以繼承A。

如果子類繼承於父類:第一、子類擁有父類非private的屬性和功能

          第二、子類具有自己的屬性和功能,即子類可以擴充父類沒有的屬性和功能。

                            第三、子類還可以以自己的方式實現父類的功能(方法)

子類從它的父類中繼承的成員有方法、域、屬性、事件、索引器。但對於構造方法,它不能被繼承,只能被調用。對於調用父類的成員,可以用base關鍵字。

 

多態表示不同的對象可以執行相同的操作,但要通過它們自己的代碼來執行。

第一、   子類以父類的身份出現。

第二、   子類在工作時以自己的方式來實現。

第三、   子類以父類的身份出現時,子類特有的屬性和方法不可以使用。

為了使子類的執行個體完全接替來自父類的類成員,父類必須將該成員聲明為虛擬。這是通過在該成員的傳回型別之前添加virtual關鍵字來實現。子類可以選擇使用override關鍵字,將父類實現替換為它自己的實現,這就是方法重寫Override,或者叫做方法覆蓋。

註:通常虛擬是方法,但其實除了欄位不能是虛擬,屬性、事件‘索引器都可以是虛擬。儘管方法可以是虛擬,但虛擬方法還是有方法體,可以實際做些事情。

對象的生命必須是父類,而不是子類,執行個體化的對象是子類,這才能實現多態。多態的原理是當方法被調用時,無論對象是否被轉換為其父類,都只有位於對象繼承鏈最末端的方法實現會被調用。也就是說,虛方法是按照其運行時的類型而非編譯時間類型進行動態綁定調用的。

例如:動物 animal=new 狗();

         或者

         狗 dog =new 狗();

         動物 animal=dog();

 

抽象類別需要注意幾點:

第一、   抽象類別不能執行個體化

第二、   抽象方法是必須被子類重寫的方法。其實抽象方法可以看成是沒有實現體的虛方法。

第三、   如果類中包含抽象方法,那麼類就必須定義為抽象類別,不論是否還包含其他一般方法。

抽象類別通常代表一個抽象概念,它提供一個繼承的出發點,當設計一個新的抽象類別時,一定是用來繼承的,所以,在一個以繼承關係形成的等級結構裡,樹節點應當是具體類,而樹枝節點均應當是抽象類別。

 

介面是把隱式公用方法和屬性群組合起來,以封裝特定功能的一個集合。一旦類實現了介面,類就可以支援介面所指定的屬性和成員。聲明介面在文法上與聲明抽象類別完全相同,但不允許提供介面中任何成員的執行方式。

介面不能執行個體化、不能有構造方法和欄位、不能有修飾符、不能聲明虛擬或靜態、實現介面的類就必須實現介面中的所有方法和屬性。

一個類可以支援多個介面,多個類也可以支援相同的介面。

介面中的方法或屬性不能有修飾符,方法沒有方法體。

interface IChange

{

       string ChangeThing(string thing);

}

 

抽象類別可以給出一些成員的實現,介面卻不能包含成員的實現

抽象類別的抽象成員可被子類部分實現,介面的成員需要實作類別完全實現

一個類只能繼承一個抽象類別,但可以實現多個介面

第一、   類是對對象的抽象,抽象類別是對類的抽象,介面是對行為的抽象。

第二、   如果行為跨越不同類的對象,可以使用介面;對於一些相似的類對象,用繼承抽象類別。

第三、   從設計角度講,抽象類別是從子類發現公用的東西,泛化出父類,然後子類繼承父類,而介面是根本不知子類的存在,方法如何?還不確定,預先定義。        

 

數組的優點:在記憶體中連續儲存,因此可以快速而容易地從頭到尾遍曆元素,可以快速修改元素等等。

數組的缺點:建立時必須要制定陣列變數的大小,還有在兩個元素之間添加元素也比較困難。

 

集合

ArrayList是命名空間System.Collections下的一部分,它是使用大小可按需要動態增加的數組實現IList介面。ArrayList的容量是ArrayList可以儲存的中繼資料。ArrayList的預設初始容量為0.隨著元素添加到ArrayList中,容量會根據需要通過重新分配自動增加。使用整數索引可以訪問此集合中的元素。此集合中的索引從零開始。

ArrayList的優點:可以根據使用大小按需動態增加,不用受事先設定其大小的控制。

                            可以隨意添加、插入或移除某一範圍的元素,比數組要方便。

ArrayList的缺點:ArrayList不管是什麼對象都接受,所有元素都看成Object,ArrayList不是型別安全的。

                            ArrayList將實值型別裝箱為Object對象,使用集合元素時需要拆箱操作,帶來很大的效能損耗。

泛型是具有預留位置(型別參數)的類、結構、介面和方法,這些預留位置是類、結構、介面和方法所儲存或使用的一個或多個類型的預留位置。泛型集合類可以將型別參數用作它所儲存的對象的類型的預留位置:型別參數作為其欄位的類型和其方法的參數類型出現。

 

委託與事件

委託是對函數的封裝,可以當作給方法的特徵制定一個名稱。而事件則是委託的一種特殊形式,當發生有意義的事情時,事件對象處理通知過程。

委託是一種引用方法的類型。一旦為委託分配了方法,委託將與該方法具有完全相同的行為,委派物件用關鍵字delegate來聲明。在發生其他類或對象關注的事情時,類或對象可以通過事件通知它們,事件對象用event關鍵字聲明。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.