C#對象的三個特點:封裝,繼承,多態, 以及c#中隱藏(new)和方法重寫(override)和重載(overload)的區別

封裝

1)封裝原則:將不需要對外提供的內容都隱藏起來,把屬性都隱藏,提供公共方法對其訪問,通常有兩種訪問方式:set 設置,get 獲取。

2)封裝結果:存在但是不可見。

3) 訪問修飾符

聲明的可訪問性                                 含義

public                                    訪問不受限制。

protected                              訪問僅限於本類或者其子類(可以跨程序集)。

private                                  訪問僅限於本類。

internal                                 訪問僅限於當前程序集。

protected  internal                 本類或者同一個程序集或者子類(可以跨程序集)裏面訪問

注意:對字段和方法而言  默認是私有的  但是對類而言 默認是internal

4)封裝:是把類的內部隱藏起來,以防止外部世界看見的一個面向對象的概念

5) 重構(這裏大家多多補充

class Class1

    {

        private int i = 1;

        public int I

        {

            get { return i; }  //只允許外部類讀取屬性

            set { i = value; } //只允許外部類寫入屬性

        }

    }

繼承

父子概念的繼承:圓繼承於圖形,圓是子概念(子類型 Sub class)圖形是父類型(Super Class也叫超類),繼承在語法方面的好處:子類共享了父類的屬性和方法的定義,子類複用了父類的屬性和方法,節省了代碼。

繼承是is a :“是”我中的一種,一種所屬關係。

子類型對象可以賦值給父類型變量(多態的一種形式),變量是代詞,父類型代詞可以引用子類型東西。

(1) 被繼承的類稱爲基類或父類,而繼承得到的類稱爲子類或派生類。子類繼承超類的狀態和行爲,同時也可以具有自己的特徵。

(2) 所有的類型的基類是System.Object類

(3) class A : B

(4) A:B  B:C 則 A:C

(5) 構造函數不能被繼承

(6) 一個子類只能繼承與一個父類

(7) 使用sealed關鍵字,其他類無法繼承此類

(8) 子類不光繼承父類的公有成員,同時繼承了父類的私有成員,只是在子類中不被訪問。

特點:

 c#中隱藏(new)和方法重寫(override)和重載(overload)的區別

重載、重寫和隱藏的定義:

重載:同一個作用域內發生(比如一個類裏面),定義一系列同名方法,但是方法的參數列表不同。這樣才能通過傳遞不同的參數來決定到底調用哪一個。而返回值類型不同是不能構成重載的。

重寫:繼承時發生,在子類中重新定義父類中的方法,子類中的方法和父類的方法是一樣的 
        例如:基類方法聲明爲virtual(虛方法),派生類中使用override申明此方法的重寫.

隱藏:基類方法不做申明(默認爲非虛方法),在派生類中使用new聲明此方法的隱藏。

重載時,根據參數選擇調用的方法;
重寫時,訪問父類子類皆調用子類的重寫方法;
隱藏時,訪問父類則調用父類的方法,子類子類的方法。

隱藏(new)示例:

 

using    System;  
   class    A  
   {  
         public    void    F()    
         {  
               Console.WriteLine("A.F");    
         }  
   }  
   class    B:    A  
   {  
         new    public    void    F()    
         {    
               Console.WriteLine("B.F");    
         }  
   }  
   class    Test  
   {  
         static void Main(string[] args)
         {  
               B    b    =    new    B();  
               b.F();  
               A    a    =    b;    
               a.F();  
         }  
   }  
   輸出爲  
   B.F  
   A.F  

 

重寫virtual(虛方法)示例  
   using    System;  
   class    A  
   {  
         public    virtual    void    F()    
         {  
               Console.WriteLine("A.F");    
         }  
   }  
   class    B:    A  
   {  
         public    override    void    F()    
         {    
               Console.WriteLine("B.F");    
         }  
   }  
   class    Test  
   {  
         static    void    Main()    
         {  
               B    b    =    new    B();  
               b.F();  
               A    a    =    b;    
               a.F();  
         }  
   }  
   輸出爲  
   B.F  
   B.F

補充:重寫override一般用於接口實現和繼承類的方法改寫,要注意

   1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;
   2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
   3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
   4、被覆蓋的方法不能爲private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。

多態

1)繼承體現了多態:父類型變量可以引用各種各樣的子類型實例,也可接收子類對象。

2)個體的多態:父類型的子類型實例是多種多樣的。

行爲的多態:父類型定義方法被子類重寫爲多種多樣的,重載也是多態的方法。

千萬不能出現將父類對象轉成子類類型,會造型異常!

3)多態前提:必須是類與類之間有關係。要麼繼承,要麼實現。通常還有一個前提:存在覆蓋。

4)多態的好處:多態的出現大大的提高程序的擴展性。

多態的弊端:雖然提高了擴展性,但是隻能使用父類的引用訪問父類中的成員。

5)在多態中成員函數的特點:

①在編譯時期:參閱引用型變量所屬的類中是否有調用的方法。如果有,編譯通過,如果沒有編譯失敗。

②在運行時期:參閱對象所屬的類中是否有調用的方法。

③簡單總結就是:成員方法在多態調用時,編譯看左邊,運行看右邊。

6)在多態中,成員變量的特點:無論編譯和運行,都參考左邊(引用型變量所屬的類)。

7)在多態中,靜態成員方法和屬性的特點:無論編譯和運行,都參考做左邊。

8)父類引用指向子類對象,當父類想使用子類中特有屬性、方法時,要向下轉型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章