亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#中Abstract 、Virtual和Override的使用及區(qū)別

 更新時(shí)間:2021年06月11日 11:13:14   作者:雪人學(xué)習(xí)  
C#中virtual,abstract,override用于方法重載,子類(lèi)覆蓋了父類(lèi)的相同方法,父類(lèi)中的實(shí)現(xiàn)不可能再被外面調(diào)用。本文給大家重點(diǎn)介紹C#中Abstract 、Virtual和Override的使用及區(qū)別,需要的朋友參考下吧

1. abstract 修飾符指示所修飾的內(nèi)容缺少實(shí)現(xiàn)或未完全實(shí)現(xiàn)。abstract修飾符可用于類(lèi)、方法、屬性、索引器和事件。在類(lèi)聲明中使用abstract修飾符以指示某個(gè)類(lèi)只能是其他類(lèi)的基類(lèi)。標(biāo)記為抽象或包含在抽象類(lèi)中的成員必須通過(guò)從抽象類(lèi)派生的類(lèi)來(lái)實(shí)現(xiàn)。

(1)抽象類(lèi)具有以下特性:

1) 抽象類(lèi)不能實(shí)例化。

2) 抽象類(lèi)可以包含抽象方法和抽象訪問(wèn)器。

3) 不能用sealed修飾符修飾抽象類(lèi),因?yàn)檫@兩個(gè)修飾符的含義是相反的。采用sealed修飾符的類(lèi)無(wú)法繼承,而abstract修飾符要求對(duì)類(lèi)進(jìn)行繼承。

4) 從抽象類(lèi)派生的非抽象類(lèi)必須包括繼承的所有抽象方法和抽象訪問(wèn)器的實(shí)際實(shí)現(xiàn)。

5) 在方法或?qū)傩月暶髦惺褂胊bstract修飾符以指示方法或?qū)傩圆话瑢?shí)現(xiàn)。

(2)抽象方法具有以下特性:

1) 抽象方法是隱式的虛方法。

2) 只允許在抽象類(lèi)中使用抽象方法聲明。

3) 因?yàn)槌橄蠓椒暶鞑惶峁?shí)際的實(shí)現(xiàn),所以沒(méi)有方法體;方法聲明只是以一個(gè)分號(hào)結(jié)束,并且在簽名后沒(méi)有大括號(hào)({ })。

(3)在抽象方法聲明中使用static或virtual修飾符是錯(cuò)誤的。除了在聲明和調(diào)用語(yǔ)法上不同外,抽象屬性的行為與抽象方法一樣。在靜態(tài)屬性上使用abstract修飾符是錯(cuò)誤的。在派生類(lèi)中,通過(guò)包括使用override修飾符的屬性聲明,可以重寫(xiě)抽象的繼承屬性。

publicabstractclassparent

{

protectedintx=100;

protectedinty = 200;

publicabstractvoidfunction();

publicabstractintX {get; }

publicabstractintY {get; }

}

publicclassnewperson:parent

{

publicoverridevoidfunction()

{

x++;

y++;

}

publicoverrideintX

{

get{returnx+100; }

}

publicoverrideintY

{

get{returny+100; }

}

}

staticvoidMain(string[] args)

{

newpersonp =newnewperson();

Console.WriteLine(p.X);

Console.WriteLine(p.Y);

p.function();

Console.WriteLine(p.X);

Console.WriteLine(p.Y);

Console.ReadKey();

}

2.virtual關(guān)鍵字用于修飾方法、屬性、索引器或事件聲明,并使它們可以在派生類(lèi)中被重寫(xiě)。虛擬成員的實(shí)現(xiàn)可由派生類(lèi)中的重寫(xiě)成員更改。調(diào)用虛方法時(shí),將為重寫(xiě)成員檢查該對(duì)象的運(yùn)行時(shí)類(lèi)型。將調(diào)用大部分派生類(lèi)中的該重寫(xiě)成員,如果沒(méi)有派生類(lèi)重寫(xiě)該成員,則它可能是原始成員。默認(rèn)情況下,方法是非虛擬的。不能重寫(xiě)非虛方法。virtual修飾符不能與static、abstract, private或override修飾符一起使用。和抽象方法的相同點(diǎn)是都用了override關(guān)鍵字進(jìn)行重寫(xiě)方法,不同點(diǎn)是抽象方法必須存在于抽象類(lèi)中,而子類(lèi)必須重寫(xiě),除非子類(lèi)也是抽象的。

publicclassDimensions

{

publicconstdoublePI =Math.PI;

protecteddoublex;

protecteddoubley;

publicDimensions() { }

publicDimensions(doublex,doubley)

{

this.x = x;

this.y = y;

}

publicvirtualdoubleArea()

{

returnx * y;

}

}

publicclassCircle:Dimensions

{

publicCircle(doubler) :base(r,0) { }


publicoverridedoubleArea()

{

Console.WriteLine(base.Area());

returnPI * x * x;

}

}

publicclassSphere:Dimensions

{

publicSphere(doubler) :base(r,0) { }

publicoverridedoubleArea()

{

return4 * PI * x * x;

}

}

publicclassCylinder:Dimensions

{

publicCylinder(doubler,doubleh) :base(r, h) { }

publicoverridedoubleArea()

{

return2 * PI * x * x + 2 * PI * x * y;

}

}

staticvoidMain(string[] args)

{

DimensionsP =newCircle(5.0);

Spheresphere =newSphere(10);

Cylindercylinder =newCylinder(10, 10);

Console.WriteLine(P.Area());

Console.WriteLine(sphere.Area());

Console.WriteLine(cylinder.Area());

Console.ReadKey();

}

3.override方法提供從基類(lèi)繼承的成員的新實(shí)現(xiàn)。由override聲明重寫(xiě)的方法稱(chēng)為重寫(xiě)基方法。重寫(xiě)的基方法必須與override方法具有相同的簽名。不能重寫(xiě)非虛方法或靜態(tài)方法。重寫(xiě)的基方法必須是virtual、abstract或override的。override聲明不能更改virtual方法的可訪問(wèn)性。override方法和virtual方法必須具有相同的訪問(wèn)級(jí)別修飾符。重寫(xiě)屬性聲明必須指定與繼承屬性完全相同的訪問(wèn)修飾符、類(lèi)型和名稱(chēng),并且被重寫(xiě)的屬性必須是virtual、abstract或override的。

4.base和this的區(qū)別

1)base作用:用于從派生類(lèi)中訪問(wèn)基類(lèi)的成員,調(diào)用基類(lèi)上已被其他方法重寫(xiě)的方法。指定創(chuàng)建派生類(lèi)實(shí)例時(shí)應(yīng)調(diào)用的基類(lèi)構(gòu)造函數(shù)。

注:從靜態(tài)方法中使用base關(guān)鍵字是錯(cuò)誤的。
2)區(qū)別:

base是子類(lèi)中引用父類(lèi),用于在派生類(lèi)中訪問(wèn)重寫(xiě)的基類(lèi)成員。
this是當(dāng)前類(lèi),引用自己,用于訪問(wèn)本類(lèi)的成員,當(dāng)然也包括繼承而來(lái)公有和保護(hù)成員。

3)注意:
a).在靜態(tài)成員中使用base和this都是不允許的。原因是,base和this訪問(wèn)的都是類(lèi)的實(shí)例,也就是對(duì)象,而靜態(tài)成員只能由類(lèi)來(lái)訪問(wèn),不能由對(duì)象來(lái)訪問(wèn)。
b).base是為了實(shí)現(xiàn)多態(tài)而設(shè)計(jì)的。
c).使用this或base關(guān)鍵字只能指定一個(gè)構(gòu)造函數(shù),也就是說(shuō)不可同時(shí)將this和base作用在一個(gè)構(gòu)造函數(shù)上。
d).除了base,訪問(wèn)基類(lèi)成員的另外一種方式是:顯示的類(lèi)型轉(zhuǎn)換來(lái)實(shí)現(xiàn)。只是該方法不能為靜態(tài)方法。

以上就是C#中Abstract 、Virtual和Override的使用及區(qū)別的詳細(xì)內(nèi)容,更多關(guān)于C# Abstract 、Virtual和Override使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#常用日期時(shí)間方法匯總

    C#常用日期時(shí)間方法匯總

    這篇文章介紹了C#常用的日期時(shí)間方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)DataTable數(shù)據(jù)行列轉(zhuǎn)換

    C#實(shí)現(xiàn)DataTable數(shù)據(jù)行列轉(zhuǎn)換

    這篇文章介紹了C#實(shí)現(xiàn)DataTable數(shù)據(jù)行列轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • 基于C#編寫(xiě)一個(gè)遠(yuǎn)程桌面應(yīng)用

    基于C#編寫(xiě)一個(gè)遠(yuǎn)程桌面應(yīng)用

    封閉環(huán)境無(wú)法拷貝外來(lái)的遠(yuǎn)程桌面軟件,所以這篇文章小編就來(lái)帶大家用C#編寫(xiě)一個(gè)簡(jiǎn)單的遠(yuǎn)程桌面應(yīng)用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Unity Shader實(shí)現(xiàn)3D翻頁(yè)效果

    Unity Shader實(shí)現(xiàn)3D翻頁(yè)效果

    這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)3D翻頁(yè)效果,Plane實(shí)現(xiàn)翻頁(yè)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板的示例代碼

    C#實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板的示例代碼

    這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)易畫(huà)圖板的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問(wèn)題,一是在服務(wù)端通過(guò)C#生成簽名和SDKID,二是在客戶(hù)端通過(guò)JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • C#在窗體中設(shè)計(jì)滾動(dòng)字幕的方法

    C#在窗體中設(shè)計(jì)滾動(dòng)字幕的方法

    普通窗體中的文字位置都是固定的,但在一些窗體中需要讓文字動(dòng)起來(lái),如一些廣告性較強(qiáng)的界面中需要做一些滾動(dòng)的字幕,所以本文給大家介紹了C#在窗體中設(shè)計(jì)滾動(dòng)字幕的方法,需要的朋友可以參考下
    2024-04-04
  • C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼

    C#實(shí)現(xiàn)格式化SQL語(yǔ)句的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)格式化SQL語(yǔ)句的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • C#實(shí)現(xiàn)簡(jiǎn)單串口通信

    C#實(shí)現(xiàn)簡(jiǎn)單串口通信

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單串口通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C#?Razor語(yǔ)法規(guī)則

    C#?Razor語(yǔ)法規(guī)則

    這篇文章介紹了C#?Razor的語(yǔ)法規(guī)則,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評(píng)論