vb點(diǎn)虐 重寫基類方法 vb重置怎么寫

vb點(diǎn)虐 的重寫和重載是什么?

我們都知道,面向?qū)ο笳Z(yǔ)言的三大特征是:封裝、繼承和多態(tài)。而重寫和重載是多態(tài)的兩種表現(xiàn)形式。多態(tài),顧名思義,就是指多種形態(tài)。而重寫和重載正好體現(xiàn)了這一點(diǎn)?,F(xiàn)在我們以 VB.NET 語(yǔ)言來說明兩者的區(qū)別。

創(chuàng)新互聯(lián)公司10多年成都定制網(wǎng)站服務(wù);為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及高端網(wǎng)站定制服務(wù),成都定制網(wǎng)站及推廣,對(duì)混凝土攪拌機(jī)等多個(gè)方面擁有多年的網(wǎng)站營(yíng)銷經(jīng)驗(yàn)的網(wǎng)站建設(shè)公司。

重寫是發(fā)生在父類與子類之間的關(guān)系。具體來講就是子類可以重寫父類的現(xiàn)有的方法。它要求子類的方法名稱及參數(shù)必須與父類完全一致。比如吃飯,父親可以吃兩碗面,孩子同樣也是吃面,卻只能吃一碗。

重載則主要是發(fā)生在同一個(gè)類當(dāng)中的,它通過多個(gè)名稱相同的方法,但方法參數(shù)不相同,或者方法返回類型不相同來加以區(qū)別。其中,方法參數(shù)不相同包括以下幾種情況:參數(shù)的個(gè)數(shù)不相同,參數(shù)的類型不相同,參數(shù)的對(duì)應(yīng)位置不相同。需要說明的是,重載同樣可以應(yīng)用到父類與子類當(dāng)中。即子類重載了父類的方法。

重寫:

在 VB.NET 中,重寫汲及到的關(guān)鍵字有:

OverRidable: 在父類中聲明的可以在子類中重寫的方法。

OverRides: 在子類中聲明的要重寫父親中可重寫的方法。

MustOverRide: 在父類中,表示這個(gè)方法必須在子類中重寫。此時(shí),該類必須聲明為抽象類。

NotOverridable: 如果當(dāng)前類還有子類,那么,在其子類中,該方法不允許被重寫。

重載:

在 VB.NET 中,重載用到的關(guān)鍵是 OverLoads。

這里需要說明幾點(diǎn):

1. 對(duì)于在同一類當(dāng)中,一組名稱相同的方法或函數(shù)重載時(shí),可以加關(guān)鍵字 OverLoads 或者不加。但如果其中有一個(gè)方法加上,那同組其它方法也必須加該關(guān)鍵字。

2. 如果該方法是重載父類中的方法。那么必須加 OverLoads 關(guān)鍵字。

3. 如果兩個(gè)同名函數(shù)僅返回類型不相同,則它們不能重載,即必須在參數(shù)上有所不同。

關(guān)于點(diǎn)虐 里面重載,重寫和覆蓋的區(qū)別

重寫是指重寫基類的方法,在基類中的方法必須有修飾符virtual,而在子類的方法中必須指明override。

格式:

基類中:

public virtual void myMethod()

{

}

子類中:

public override void myMethod()

{

}

重寫以后,用基類對(duì)象和子類對(duì)象訪問myMethod()方法,結(jié)果都是訪問在子類中重新定義的方法,基類的方法相當(dāng)于被覆蓋掉了。

重載

用于在給定了參數(shù)列表和一組候選函數(shù)成員的情況下,選擇一個(gè)最佳函數(shù)成員來實(shí)施調(diào)用。

public void test(int x,int y){}

public void test(int x,ref int y){}

public void test(int x,int y,string a){}

重載特征:

I.方法名必須相同

II.參數(shù)列表必須不相同,與參數(shù)列表的順序無關(guān)

III.返回值類型可以不相同

=========================

但如果有泛型,就要注意了!

多態(tài)

c#的多態(tài)性主要體現(xiàn)在類的繼承上:

子類繼承父類的時(shí)候,可能出現(xiàn)同名但方法定義不同的情況,

所以在子類中會(huì)將原方法覆蓋,實(shí)現(xiàn)自身的要求

1 /* 2 ?? ?Function: override 3 */ 4 using System; 5 namespace TestOverride 6 { 7 ? ? class Employee 8 ?? ?{ 9 ? ? ? ? //父類虛方法10 ? ? ? ? public virtual void CalculatePay()11 ?? ? ? ?{12 ? ? ? ? ? ? Console.WriteLine("Employee");13 ?? ? ? ?} ? ? ? ?

14 ?? ?}15 ? ? 16 ? ? ? ?//子類繼承重寫CalculatePay()方法17 ? ? class SalariedEmploy : Employee18 ?? ?{19 ? ? ? ? public override void CalculatePay()20 ?? ? ? ?{21 ? ? ? ? ? ? Console.WriteLine("Salary");22 ?? ? ? ?}23 ?? ?}24 ? ? 25 ? ? class AppPay26 ?? ?{27 ? ? ? ? public static void Main(String[] args)28 ?? ? ? ?{29 ? ? ? ? ? ? //父類創(chuàng)建實(shí)例30 ? ? ? ? ? ? Employee employee1 = new Employee();31 ? ? ? ? ? ? employee1.CalculatePay(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //Employee32 ? ? ? ? ? ? ? ? 33 ? ? ? ? ? ? //子類賦值給父類34 ? ? ? ? ? ? Employee employee2 = new SalariedEmploy();35 ? ? ? ? ? ? employee2.CalculatePay(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // Salary36 ? ? ? ? ? ? 37 ? ? ? ? ? ? //子類創(chuàng)建實(shí)例38 ? ? ? ? ? ? SalariedEmploy employee3 = new SalariedEmploy();39 ? ? ? ? ? ? employee3.CalculatePay(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//Salary40 ? ? ? ? ? ? 41 ?? ? ? ?} ? ? ? ?

42 ?? ?}43 }44 /*45 Out:46 Employe47 Salary48 Salary49 */

View Code

*****************************************************************************************************************

C#之重載與覆蓋

overload:重載指的是同一個(gè)類中有兩個(gè)或多個(gè)名字相同但是參數(shù)不同的方法,(注:返回值不能區(qū)別函數(shù)是否重載),重載沒有關(guān)鍵字。

override:過載也稱重寫是指子類對(duì)父類中虛函數(shù)或抽象函數(shù)的“覆蓋”(這也就是有些書將過載翻譯為覆蓋的原因),但是這種“覆蓋”和用new關(guān)鍵字來覆蓋是有區(qū)別的。

new:覆蓋指的是不同類中(基類或派生類)有兩個(gè)或多個(gè)返回類型、方法名、參數(shù)都相同,但是方法體不同的方法。

但是這種覆蓋是一種表面上的覆蓋,所以也叫隱藏,被覆蓋的父類方法是可以調(diào)用得到的。

重載覆蓋的發(fā)生條件:

重載,必然發(fā)生在一個(gè)類中,函數(shù)名相同,參數(shù)類型或者順序不同構(gòu)成重載,與返回類型無關(guān)

重寫,必然發(fā)生在基類和派生類中,其類函數(shù)用virtual修飾,派生類用override修飾

覆蓋,在子類中寫一個(gè)和基類一樣名字(參數(shù)不同也算)的非虛函數(shù),會(huì)讓基類中的函數(shù)被隱藏,編譯后會(huì)提示要求使用New關(guān)鍵字

重載示例:

public void Fun()

{

Console.WriteLine("I am F");

}

public ?void Fun(int i)

{

Console.WriteLine("I am F,i={0}",i);

}

override重寫特性:

由 override 聲明重寫的方法稱為重寫基方法,重寫的基方法必須與 override 方法具有相同的簽名。

重寫的基方法必須是 virtual、abstract 或 override 的,不能重寫非虛方法或靜態(tài)方法。

override的方法和virtual的方法必須具有相同的訪問級(jí)別修飾符,不能更改 virtual 方法的可訪問性。

不能使用new、static 或 virtual 修飾符來修改 override 方法。

重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,并且被重寫的屬性必須是virtual、abstract 或 override 的。

覆蓋示例:

當(dāng)我們沒有使用覆蓋時(shí),派生類繼承基類,結(jié)果如下:

class A

{

public void Fun()

{

Console.WriteLine("I am F");

}

}

class Program:A

{

static void Main(string[] args)

{

Program p = new Program();

p.Fun();

Console.Read();

}

}

//結(jié)果為:I am F

當(dāng)我們覆蓋原來的方法呢?

class A

{

public void Fun()

{

Console.WriteLine("I am F");

}

}

class Program:A

{

public new void Fun()

{

int i = 1;

Console.WriteLine("I am F,i={0}", i);

}

static void Main(string[] args)

{

Program p = new Program();

p.Fun();

Console.Read();

}

}

//結(jié)果為:I am F,i=1

new覆蓋與重寫、重載的區(qū)別:

當(dāng)子類與父類的參數(shù)不同時(shí)

當(dāng)基類函數(shù)不是虛函數(shù)時(shí),基類函數(shù)將被隱藏。(因?yàn)樽宇惡突惒辉谕环秶鷥?nèi),所以不是重載)

當(dāng)基類函數(shù)是虛函數(shù)時(shí),基類函數(shù)將被隱藏。(因?yàn)樽宇惡突惒辉谕环秶鷥?nèi),所以不是重載;因?yàn)閰?shù)不同,所以不是重寫)

當(dāng)子類與父類的參數(shù)相同時(shí)

當(dāng)基類函數(shù)不是虛函數(shù)時(shí),基類函數(shù)將被隱藏。(因?yàn)樽宇惡突惒辉谕环秶鷥?nèi),所以不是重載,因?yàn)榛惒皇翘摵瘮?shù),所以是隱藏不是重寫)

當(dāng)基類函數(shù)是虛函數(shù)時(shí),基類函數(shù)將被覆蓋。(因?yàn)樽宇惡突惒辉谕环秶鷥?nèi),所以不是重載)

那么為什么不是重寫呢?我們可以做一個(gè)例子還測(cè)試一下,這個(gè)例子在虛函數(shù)時(shí)已經(jīng)舉過,在這里為了說明此問題在重復(fù)一下:

class A

{

public virtual void Fun()

{

Console.WriteLine("I am F");

}

}

class Program:A

{

public override void Fun()

{

int i = 1;

Console.WriteLine("I am F,i={0}", i);

}

static void Main(string[] args)

{

A p = new Program();

p.Fun();

Console.Read();

}

}

我們知道,以上例子中,派生類存在一個(gè)對(duì)基類的重寫方法,所以結(jié)果為:I am F ,i=1

若是我們把override換成new,那么如果是重寫的話,會(huì)和上面的結(jié)果相等,但實(shí)際結(jié)果是什么呢?

實(shí)際的結(jié)果是:I am F

由此我們知道,當(dāng)基類函數(shù)是虛函數(shù)時(shí),基類函數(shù)不是重寫,而是覆蓋了基函數(shù)的同名函數(shù)。

在vb點(diǎn)虐 類中Public Overrides Function有什么作用?

重寫基類的方法啊。你可以重寫別人的類的某些方法、屬性,來實(shí)現(xiàn)自己的目的。比如你拿到一輛車,你覺得他的顏色不好看,隨時(shí)就涂成你要的顏色。車的性能是沒有多大變化的,不過改了他的顏色,達(dá)到了自己的目的。

vb點(diǎn)虐 派生類重寫基類函數(shù)的問題?

vb點(diǎn)虐 的MyBase(mybase)與java的super能基本對(duì)應(yīng)。

下圖是一個(gè)例子:

當(dāng)前題目:vb點(diǎn)虐 重寫基類方法 vb重置怎么寫
鏈接URL:http://www.bm7419.com/article22/ddehjcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)