C# 繼承

2018-01-22 17:06 更新

C# 繼承

類可以從另一個(gè)類繼承以擴(kuò)展或定制原始類。

繼承一個(gè)類會(huì)重用該類中的功能。

類只能從一個(gè)類繼承。

例子

在這個(gè)例子中,我們首先定義一個(gè)名為Item的類:


public class Item {
   public string Name; 
} 

接下來(lái),我們定義稱為Product和DiscountProduct的類,它將從Item繼承。產(chǎn)品和DiscountProduct獲得項(xiàng)目的一切,加上他們定義的任何額外的成員:


public class Product : Item{ // inherits from Item 

    public long InStoreCount; 
} 
public class DiscountProduct : Item{  // inherits from Item 

    public decimal Price; 
} 

下面是我們?nèi)绾问褂眠@些類:


Product myProduct = new Product {Name="CSS",InStoreCount=1000}; 

Console.WriteLine (myProduct.Name); // CSS 
Console.WriteLine (myProduct.InStoreCount); // 1000 

以下代碼使用DiscountProduct類。


DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 }; 
Console.WriteLine (mansion.Name);     // SQL 
Console.WriteLine (mansion.Price); // 250000 

注意

派生類Product和DiscountProduct從基類Item繼承Name屬性。

派生類也稱為子類?;愐卜Q為超類。

多態(tài)性

引用是多態(tài)的。

這意味著類型x的變量可以引用子類化x的對(duì)象。

例如,考慮以下方法:


public static void Display (Item i) { 
    System.Console.WriteLine (i.Name); 
} 

此方法可以顯示Product和DiscountProduct,因?yàn)樗鼈兌际荌tems:


Product myProduct = new Product ... ; 
DiscountProduct mansion = new DiscountProduct ... ; 
Display (myProduct); 
Display (mansion); 

多態(tài)性工作,因?yàn)樽宇惥哂衅浠惖乃泄δ堋?/p>

is 運(yùn)算符


The <code>is</code> operator tests whether an 
object derives from a specified class or implements an interface. 

It is often used to test before downcasting. 

if (a is Product) {
   Console.WriteLine (((Product)a).InStoreCount); 
}

virtual 函數(shù)成員

標(biāo)記為virtual的函數(shù)可以被希望提供特殊實(shí)現(xiàn)的子類覆蓋。

方法,屬性,索引器和事件都可以聲明為virtual:


public class Item {
   public string Name;
   public virtual decimal FinalPrice { get { return 0; } } 
} 

子類通過應(yīng)用覆蓋修飾符覆蓋虛擬方法:


public class Product : Item {
    public long InStoreCount; 
} 
public class DiscountProduct : Item {
    public decimal Price;
    public override decimal FinalPrice { 
       get { 
          return Price; 
       } 
    } 
} 

默認(rèn)情況下,項(xiàng)目的FinalPrice為0。

Product不需要專門化此行為。

但是,DiscountProduct專門處理FinalPrice屬性以返回價(jià)格的值:


DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 }; 
Item a = mansion; 
Console.WriteLine (mansion.FinalPrice); // 250000 
Console.WriteLine (a.FinalPrice); // 250000 

虛擬和重寫方法的簽名,返回類型和可訪問性必須相同。

重寫的方法可以通過base關(guān)鍵字調(diào)用其基類實(shí)現(xiàn)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)