日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中override和overload的区别

發(fā)布時間:2025/5/22 C# 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中override和overload的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

重載應該叫overload,重寫叫override;重載某個方法是在同一個類中發(fā)生的!重寫是在子類中重寫父類中的方法。

1.override:?? 父類:public virtual string ToString(){return "a";}
?????????????????? 子類:public override string ToString(){return "b";}
2.overload:? 同一類中或父子關系類中皆可.
?????????????????? public string ToString(){return "a";}
?????????????????? public string ToString(int id){return id.ToString();}
重寫(override)是用于重寫基類的虛方法,這樣在派生類中提供一個新的方法;

重載(overload)是提供了一種機制, 相同函數(shù)名通過不同的返回值類型以及參數(shù)來表來區(qū)分的機制
=====================================================?

很本質的區(qū)別就是看函數(shù)特征:覆寫(Override)的兩個函數(shù)的函數(shù)特征相同,重載(Overload)的兩個函數(shù)的函數(shù)名雖然相同,但函數(shù)特征不同。
函數(shù)特征包括函數(shù)名、參數(shù)的類型和個數(shù)。
Override 是在繼承的時候,如果你寫的函數(shù)與要繼承的函數(shù)函數(shù)特征相同,那么,加上這個關鍵字,在使用這個子類的這個函數(shù)的時候就看不見父類(或超類)的函數(shù)了,它被覆蓋掉了。
比如:Derived繼承了Base,Base里面有void A(int a) ,那么如果你Derived里面覺得A寫得不好或不適合這個類,你想重新再寫一遍A里的代碼,那么就寫override void A(int a)這樣,原來的那個函數(shù)就被你新寫的這個覆蓋掉了。
overload 是重載,就是說函數(shù)名相同,函數(shù)特征不同,系統(tǒng)會根據(jù)你提供的參數(shù)來調相應的函數(shù)。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么調的是第一個,如果是A(1,1)那么調的是第二個。
=====================================================
1. 重寫(override)
------------------
使用 override 修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員的新實現(xiàn)。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的簽名。
不能重寫非虛方法或靜態(tài)方法。重寫基方法必須是虛擬的、抽象的或重寫的。也就是說,用 override 修飾符重寫的基類中的方法必須是 virtual, abstract 或 override 方法。

2. 重載(overload)
------------------
當類包含兩個名稱相同但簽名不同的方法時發(fā)生方法重載。

使用重載方法的指南:
a. 用方法重載來提供在語義上完成相同功能的不同方法。
b. 使用方法重載而不是允許默認參數(shù)。默認參數(shù)的版本控制性能不好,因此公共語言規(guī)范(CLS)中不允許使用默認參數(shù)。
c. 正確使用默認值。在一個重載方法系列中,復雜方法應當使用參數(shù)名來指示從簡單方法中假定的默認狀態(tài)發(fā)生的更改。
d. 對方法參數(shù)使用一致的排序和命名模式。提供一組重載方法,這組重載方法帶有遞增數(shù)目的參數(shù),以使開發(fā)人員可以指定想要的級別的信息,這種情況很常見。您指定的參數(shù)越多,開發(fā)人員就可指定得越詳細。
e. 如果必須提供重寫方法的能力,請僅使最完整的重載是虛擬的并根據(jù)它來定義其他操作。

下面這個例子代碼具體解釋一下這種模式,只有最后一個方法(參數(shù)最完整的方法)是虛方法,在繼承了這個類的子類中只要重寫(override)這個方法就行了。

?

public?class?SampleClass
{
???private?string?myString;

???public?SampleClass(string?str)
???{
??????this.myString?=?str;
???}

???public?int?IndexOf(string?s)
???{
??????return?IndexOf?(s,?0);
???}

???public?int?IndexOf(string?s,?int?startIndex)
???{
??????return?IndexOf(s,?startIndex,?myString.Length?-?startIndex?);
???}

???public?virtual?int?IndexOf(string?s,?int?startIndex,?int?count)
???{
??????return?myString.IndexOf(s,?startIndex,?count);
???}
}

轉載于:https://www.cnblogs.com/shenzikun1314/p/6393817.html

總結

以上是生活随笔為你收集整理的C#中override和overload的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。