C#中重載重寫和覆蓋的定義與區別

今天小編就爲大家分享一篇關於C#中重載重寫和覆蓋的定義與區別,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

一、重載

  1、重載示意

   重載(Overload)是重新加載的意思,指的是同一個類中同名,但是參數列表不同的方法組(返回值不能區別函數是否重載),重載沒有關鍵字。通俗點說重載是對內存中同一個類中的函數或方法進行重新加載的意思。

  2、發生條件

   必須發生在一個類中,函數名相同,參數類型或者個數不同構成重載,與返回類型無關。

如:

Public class Name 
{ 
  Public string GetName(string username) 
  { 
    Return username; 
  } 
Public int GetName(int usercount) 
  { 
    Return usercount; 
  } 
}

二、重寫

   1、示意

    重寫(Override)指子類修改父類中某個函數的函數體,需要重寫的父類中的函數必須是由virtual、abstract 或override標註的,不能重寫非虛方法或靜態方法。

    Override是在繼承的時候,如果你寫的函數與要繼承的函數函數特徵(函數特徵包括函數名,參數的類型和個數)相同,那麼,加上這個關鍵字,在使用這個子類的這個函數的時候就看不見父類(或超類)的函數了,它被覆蓋掉了。

   2、發生條件

    必須發生在基類和派生類中,基類函數必須用virtual、abstract 或override修飾,派生類用override修飾。

如:

 class Program 
  { 
    static void Main(string[] args) 
    { 
      oc oa=new ob(); 
      oa.b(1, 2);  //輸出結果爲fdfdf 
    } 
    public class oc 
    { 
      private int a; 
     //封裝 
      public int geta 
      { 
        get { return a; } 
      } 
      public int seta 
      { 
        set { a = value; } 
      } 
     //函數b 
      public virtual int b(int c, int e) 
      { 
        Console.WriteLine("{0}+{1}={2}", c, e, c + e); 
        return c + e; 
      } 
    } 
    //派生類ob,基類oc 
    public class ob : oc 
    { 
    //重寫基類中的函數b 
      public override int b(int c,int e) 
      { 
        Console.WriteLine("fdfdf"); 
        return c; 
      }  
    } 
}

三、覆蓋

   1、示意

    覆蓋指重新定義子類中與父類具有相同函數特徵的的函數體。子類中有一函數和父類中函數的函數特徵相同,但函數體不同,稱爲覆蓋。這種覆蓋又稱爲隱藏,是隱藏父類中相同的函數,並沒有進行重寫。

   2、發生條件

   在子類中寫一個和基類一樣名字(參數不同也算)的非虛函數,會讓基類中的函數被隱藏,編譯後會提示要求使用New關鍵字。

如:

 class Program 
  { 
    static void Main(string[] args) 
    { 
      oc oa=new ob(); 
      oa.b(1, 2); //輸出結果爲1+2=3 
    } 
    public class oc 
    { 
      private int a; 
    //封裝 
      public int geta 
      { 
        get { return a; } 
      } 
      public int seta 
      { 
        set { a = value; } 
      } 
    //函數b 
      public int b(int c, int e) 
      { 
        Console.WriteLine("{0}+{1}={2}", c, e, c + e); 
        return c + e; 
      } 
    } 
  //派生類ob,基類oc 
    public class ob : oc 
    { 
     //覆蓋,隱藏基類中的函數b 
      public new int b(int c,int e) 
      { 
        Console.WriteLine("fdfdf"); 
        return c; 
      }  
    } 
}

重寫(Override)的兩個函數的函數特徵相同,應用在子類和父類中,會重寫父類函數;

重載(Overload)的兩個函數的函數名雖然相同,但函數特徵不同,應用在同一類中;

覆蓋(new)兩個函數的函數名一定相同,但函數特徵可相同也可不相同,應用在子類和父類中,會隱藏父類同名函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。如果你想了解更多相關內容請查看下面相關鏈接

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