日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#多態(tài)性的理解詳談

C#多態(tài)性的內(nèi)涵實(shí)際就是通過(guò)繼承,一個(gè)類可以用作多種類型:可以用作它自己的類型、任何基類型,或者在實(shí)現(xiàn)接口時(shí)用作任何接口類型。這稱為多態(tài)性。C# 中的每種類型都是多態(tài)的。類型可用作它們自己的類型或用作 Object 實(shí)例,因?yàn)槿魏晤愋投甲詣?dòng)將 Object 當(dāng)作基類型。

多態(tài)性不僅對(duì)派生類很重要,對(duì)基類也很重要。任何情況下,使用基類實(shí)際上都可能是在使用已強(qiáng)制轉(zhuǎn)換為基類類型的派生類對(duì)象?;惖脑O(shè)計(jì)者可以預(yù)測(cè)到其基類中可能會(huì)在派生類中發(fā)生更改的方面。例如,表示汽車的基類可能包含這樣的行為:當(dāng)考慮的汽車為小型貨車或敞篷汽車時(shí),這些行為將會(huì)改變?;惪梢詫⑦@些類成員標(biāo)記為虛擬的,從而允許表示敞篷汽車和小型貨車的派生類重寫該行為。

C#多態(tài)性概念的理解

當(dāng)派生類從基類繼承時(shí),它會(huì)獲得基類的所有方法、字段、屬性和事件。若要更改基類的數(shù)據(jù)和行為,您有兩種選擇:可以使用新的派生成員替換基成員,或者可以重寫虛擬的基成員。

使用新的派生成員替換基類的成員需要使用 new 關(guān)鍵字。如果基類定義了一個(gè)方法、字段或?qū)傩?,則 new 關(guān)鍵字用于在派生類中創(chuàng)建該方法、字段或?qū)傩缘男露x。new 關(guān)鍵字放置在要替換的類成員的返回類型之前。例如:

C#多態(tài)性概念實(shí)例

 
 
 
  1. public class BaseClass
  2. {
  3. public void DoWork() { }
  4. public int WorkField;
  5. public int WorkProperty
  6. {
  7. get { return 0; }
  8. }
  9. }
  10. public class DerivedClass : BaseClass
  11. {
  12. public new void DoWork() { }
  13. public new int WorkField;
  14. public new int WorkProperty
  15. {
  16. get { return 0; }
  17. }
  18. }

C#多態(tài)性實(shí)例中使用new關(guān)鍵字時(shí),調(diào)用的是新的類成員而不是已被替換的基類成員。這些基類成員稱為隱藏成員。如果將派生類的實(shí)例強(qiáng)制轉(zhuǎn)換為基類的實(shí)例,就仍然可以調(diào)用隱藏類成員。例如:

 
 
 
  1. DerivedClass B = new DerivedClass();
  2. B.DoWork();// Calls the new method.
  3. BaseClass A = (BaseClass)B;
  4. A.DoWork();// Calls the old method.

為了使派生類的實(shí)例完全接替來(lái)自基類的類成員,基類必須將該成員聲明為虛擬的。這是通過(guò)在該成員的返回類型之前添加 virtual 關(guān)鍵字來(lái)實(shí)現(xiàn)的。然后,派生類可以選擇使用 override 關(guān)鍵字而不是 new,將基類實(shí)現(xiàn)替換為它自己的實(shí)現(xiàn)。例如:

 
 
 
  1. public class BaseClass
  2. {
  3. public virtual void DoWork() { }
  4. public virtual int WorkProperty
  5. {
  6. get { return 0; }
  7. }
  8. }
  9. public class DerivedClass : BaseClass
  10. {
  11. public override void DoWork() { }
  12. public override int WorkProperty
  13. {
  14. get { return 0; }
  15. }
  16. }

C#多態(tài)性概念中字段不能是虛擬的,只有方法、屬性、事件和索引器才可以是虛擬的。當(dāng)派生類重寫某個(gè)虛擬成員時(shí),即使該派生類的實(shí)例被當(dāng)作基類的實(shí)例訪問(wèn),也會(huì)調(diào)用該成員。例如:

 
 
 
  1. DerivedClass B = new DerivedClass();
  2. B.DoWork();// Calls the new method.
  3. BaseClass A = (BaseClass)B;
  4. A.DoWork();// Also calls the new method

C#多態(tài)性的相關(guān)理解就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#多態(tài)性有所幫助。


文章名稱:C#多態(tài)性的理解詳談
文章路徑:http://www.dlmjj.cn/article/dhjepcs.html