程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#中重載與重寫區別分析

C#中重載與重寫區別分析

編輯:關於C語言

一、前言
接觸面向對象的思想已經有一段時光了,為什麼要學習面向對象呢?因為面向對象具有可復用性、可維護性、可擴展性等優點。
本人之前一直接觸的是VB語言,所以正式接觸面向對象的編程語言還要從C#開始。前段時間,剛學完C#,其中重載、重寫傻傻分不清楚。如今通過查閱資料對這兩者有了一個大概的理解,不足之處還請多多指教。
二、定義
重載:在同一定義域內(比如一個類裡面)。方法名相同,參數個數、次序、類型不同。因此重載對返回值沒有要求,可以相同,也可以不同。但是如果方法名相同,參數個數、次序、類型都相同,而返回值不同,則無法構成重載。
重寫:繼承時發生,在子類中重寫定義父類中的方法,子類中的方法和父類中的方法是一樣的。即方法名、參數的個數、次序、類型和返回值都相同。例如父類方法聲明為virtual(虛方法),子類中使用override申明此方法的重寫。
三、示例
1、重載:
我們建立一個貓類,在這個類中構造兩個方法。一個是帶參數姓名的方法,另一個是不帶參數姓名的方法。這樣當我們初始化一個“貓”的對象時,就可以選擇給對象起名或者不起名。從而達到擴展的目的。

2、 重寫:
比如動物都有“叫”的方法。貓和狗是它的子類,貓的叫聲是“喵”,狗的叫聲是“汪”,如何在子類中重寫父類的方法呢?首先在動物類中構造一個虛方法。

? 1 2 3 4 5 6 7 Class Animal { public virtual string Shout()//注意修飾符中增加了一個virtual,它表示此方法是虛方法,可以被子類重寫 { return ""; } }

在構建貓這個類時,我們重寫“叫”這個方法

? 1 2 3 4 5 6 7 8 Class cat:Animail { Public override string Shout() {//關鍵字override,表示方法重寫 string result="喵"; return result; } }

在構建狗這個類時,我們也重寫“叫”這個方法

? 1 2 3 4 5 6 7 8 9 Class Dog:Animal { public override string Shout() { string result="汪" return result; } }

重寫發生在父類和子類之間,聲明的是父類,實例化的是子類。本例子實現了多態。
四、小結

重載必須發生在一個類中,方法名相同,參數不同。值得注意的是,方法重載必須通過參數不同來判斷調用哪個方法,而不能通過返回值。
重寫override一般用於接口實現和繼承類的方法改寫。值得注意的是,被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有進行覆蓋。

以上就是本文的全部內容,希望大家對C#中重載與重寫的異同有所了解,謝謝大家的閱讀。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved