深刻懂得C#中new、override、virtual症結字的差別。本站提示廣大學習愛好者:(深刻懂得C#中new、override、virtual症結字的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻懂得C#中new、override、virtual症結字的差別正文
OO思惟如今曾經在軟件開辟項目中普遍運用,個中最主要的一個特征就是繼續,比來偶簡略的溫習了下在C#中觸及到繼續這個特征時,所須要用到的症結字,個中有一些症結點,專程整頓出來,便利年夜家查閱。
1、在C#中,new這個症結字應用頻率異常高,重要有3個功效:
a) 作為運算符用來創立一個對象和挪用結構函數。
b) 作為潤飾符。
c) 用於在泛型聲明中束縛能夠用作類型參數的參數的類型。
在本文中,只詳細引見new作為潤飾符的感化,在用作潤飾符時,new症結字可以在派生類中隱蔽基類的辦法,也就說在應用派生類的辦法是挪用的辦法是New症結字新界說出來的辦法,而不是基類的辦法。在不應用New症結字來隱蔽基類辦法也是可以的,編譯器會湧現一個正告,提醒假如成心去隱蔽基類的辦法,請應用New症結字潤飾。
這裡有個留意事項就是New和Override這兩個症結字是互斥的。弗成以同時應用。
2、Override症結字重要是供給派生類對基類辦法的新完成,重寫的基類辦法必需和Override的辦法具有雷同的簽名,此症結字弗成以用於重寫非虛辦法和靜態辦法,與其配套應用的症結字是Virtual、abstract、Override。與此同時,Override辦法還弗成以修正Virtual辦法的可拜訪性,Override辦法和Virtual辦法必需具有雷同的拜訪潤飾符,不克不及應用潤飾符 new、static、virtual 或abstract 來修正 override 辦法。
以下是一個小demo,展現了new和override的實質差別:
class Program { static void Main(string[] args) { class1 ct1 = new class1(); contact ct2 = new class2(); ct1.prinf(); ct2.prinf(); } } abstract public class contact { public virtual void prinf() { Console.WriteLine ("這是虛辦法"); } } public class class1 : contact { public override void prinf() { Console.WriteLine ("這是新的辦法"); } } public class class2 : contact { public new void prinf() { Console.WriteLine ("這是另外一個新的辦法"); } }
此demo運轉成果為:
這是新的辦法
這是虛辦法
3、 Virtual 症結字許可在派生類中重寫這些對象,默許情形下,辦法長短虛擬的,弗成以重寫非虛辦法,virtual症結字弗成以與static、abstract、private、override一路應用。Virtual症結字又是和override慎密弗成分的,假如要完成Virtual辦法就必需要應用override或new症結字(new和override發生的機理分歧)。
總結:New症結字重要用來差別派生類和基類同名辦法的選擇成績,經由過程隱蔽基類辦法,到達使編譯器挪用准確的辦法的目標。Override重要用來對基類的辦法和虛辦法停止重寫。
以上這篇深刻懂得C#中new、override、virtual症結字的差別就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。