ASP.NET動態網站製作(21)-- C#(4)

來源:互聯網
上載者:User

標籤:

前言:這節課是C#講解的第四節課,主要圍繞物件導向的三大特性展開。上節課已經把封裝講完了,這節課講繼承和多態。

內容

  1.繼承:寫程式的時候有些資訊是公用的,可以將這些公用的資訊寫在父類裡,增強代碼的可複用性。

    (1)class A : B,被繼承的類稱為基類或父類或超類,而繼承得到的類稱為子類或衍生類別。子類繼承超類的狀態和行為(欄位和方法),同時也可以具有自己的特徵。父類裡面的私人成員,子類也是繼承了的,只是沒有存取權限,就像不知道密碼的保險箱一樣。

    (2)A:B,B:C,則A:C。

    (3)任何類型的基類是object類型。

    (4)當一個類是密封類(sealed),它是不能被繼承的。

    (5)A:B,B裡面有sayHi(),用A的執行個體化對象調用sayHi()的時候,首先調用的是B裡面的構造方法,然後是A的構造方法,最後才是sayHi(),如果B上面還有繼承的類,則先調用該類的構造方法。如:

Animal類:

1 class Animal2     {3         public Animal()4         {5             Console.WriteLine("我是動物,我出生了");6         }7     }

Person類:

 1 class Person:Animal 2     { 3         public int age; 4         public string name; 5  6         public Person() 7         { 8             Console.WriteLine("我是人類,我出生了"); 9         }10         public void SayHi()11         {12             Console.WriteLine("大家好,我是人類");13         }14     }

Chinese類:

1 class Chinese:Person2     {3         public Chinese()4         {5             Console.WriteLine("我是中國人,我出生了");6         }7     }

其中:Chinese:Person,Person:Animal。

1 class Program2     {3         static void Main(string[] args)4         {5             Chinese c = new Chinese();6             c.SayHi();7             Console.ReadKey();8         }9     }

運行結果為:

    (6)如果子類和父類裡有相同名稱的方法,若子類對象調用該方法,則父類中的同名方法將被隱藏。可使用new修飾同名方法而達到隱藏父類同名方法的目的。

    (7)一個父類的方法如果要被子類覆寫,則父類需聲明為virtual類型。子類繼承後使用override修飾該方法。如在父類中:public virtual void SayHi(),在子類中:public override void SayHi()。

    (8)裡氏替換原則:子類對象可以賦值給父類對象:Person p = new Chinese(),反之不成立。

    (9)如果A:B,A、B裡面都有一個方法叫SayHi(),B b = new A(),當b調用SayHi()時,預設情況下(即沒有被複寫),則採用就近原則,即調用 B的SayHi()。如果SayHi()被覆寫,則調用子類的SayHi()。

  2.多態:同一種方法名,但是有不同的實現形式。多態分為重載(overload)和覆寫(override)。

    (1)重載:方法名相同,方法裡面的參數個數或者類型不同。

    (2)只有父類的虛方法(virtual)才能被子類覆寫,子類覆寫用關鍵字override。如果不加override就隱藏了父類的方法(需加關鍵字new)。

    (3)靜態方法不能被覆寫,但可以被隱藏。

    (4)靜態類裡面只能有靜態成員。

    (5)靜態成員不能帶override,virtual,abstract。

  3.抽象類別、抽象方法:abstract + 類名、abstract + 方法名

    (1)抽象類別不能被執行個體化。

    (2)抽象方法的作用是為子類提供一個統一的介面,抽象方法裡面只有聲明,沒有實現。

    (3)一個類一旦繼承了一個抽象類別,就必須實現對該抽象類別裡面所有的抽象方法的實現。

    (4)一個抽象類別裡面可以有非抽象方法,但是一旦一個類裡面有抽象方法,該類就為抽象類別了。

    (5)抽象方法在聲明後用一個;結束,不需要用{}。

    (6)抽象方法在覆寫的時候不需要聲明為虛方法。

 1 public abstract class Program 2 { 3     public abstract void A(); 4     public abstract void B(); 5 } 6 public class C : Program 7 { 8     public override void A() 9     {10         Console.WriteLine("China");     11     }12     public override void B()13     {14         Console.WriteLine("Hello");15     }16     public static void Main()17     {18         C me = new C();19         me.A();20     }21 }

  4.介面:Interface + 類名

    (1)介面用來實現多繼承,一個類只能有一個父類,但可以繼承多個介面。

    (2)介面是一種特殊的抽象類別,它裡面規定得更嚴格,裡面的方法只能為抽象方法。

    (3)定義一個介面的時候,一般為預設,即 Interface+類名,前面自動加上了public abstract。定義介面中的方法時,也只需要寫傳回型別 + 方法名即可,也預設為public abstract。

    (4)介面裡面的所有成員都是公用的,抽象類別裡面的成員可以是私人的,公用的,受保護的。

    (5)一個類繼承於一個介面,就必須完成介面中所有方法的實現。

    (6)介面不能包含欄位、建構函式、靜態變數或者常量等。

  5.泛型:為避免反覆裝箱拆箱過程,所以引入泛型。它將裝入的資料類型聲明好,只允許此種類型的資料加入。在System.Collections.Generic命名空間中。

    非泛型集合類與泛型集合類的對照關係:ArrayList---List<T>;HashTable---Dictionary<T>;Stack---Stack<T>。

後記:課下學習。

ASP.NET動態網站製作(21)-- C#(4)

聯繫我們

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