最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

1) 抽象類不能實例化。

2) 抽象類可以包含抽象方法和抽象訪問器。

3) 不能用sealed修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。采用sealed修飾符的類無法繼承,而abstract修飾符要求對類進行繼承。

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

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

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

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

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

3) 因為抽象方法聲明不提供實際的實現(xiàn),所以沒有方法體;方法聲明只是以一個分號結(jié)束,并且在簽名后沒有大括號({ })。

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

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

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方法提供從基類繼承的成員的新實現(xiàn)。由override聲明重寫的方法稱為重寫基方法。重寫的基方法必須與override方法具有相同的簽名。不能重寫非虛方法或靜態(tài)方法。重寫的基方法必須是virtual、abstract或override的。override聲明不能更改virtual方法的可訪問性。override方法和virtual方法必須具有相同的訪問級別修飾符。重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符、類型和名稱,并且被重寫的屬性必須是virtual、abstract或override的。

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

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

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

base是子類中引用父類,用于在派生類中訪問重寫的基類成員。
this是當前類,引用自己,用于訪問本類的成員,當然也包括繼承而來公有和保護成員。

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

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

相關(guān)文章

  • C# 提取PDF中的表格詳情

    C# 提取PDF中的表格詳情

    這篇文章主要給大家介紹C# 提取PDF中的表格,本文介紹在C#程序中(附VB.NET代碼)提取PDF中的表格的方法,調(diào)用Spire.PDF for .NET提供的提取表格的 類 以及 方法 等來獲取表格單元格中的文本內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Unity UGUI通過搖桿控制角色移動

    Unity UGUI通過搖桿控制角色移動

    這篇文章主要為大家詳細介紹了Unity3D基于陀螺儀實現(xiàn)VR相機功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • c# 進程之間的線程同步

    c# 進程之間的線程同步

    這篇文章主要介紹了c# 進程之間的線程同步,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • Unity實現(xiàn)旋轉(zhuǎn)扭曲圖像特效

    Unity實現(xiàn)旋轉(zhuǎn)扭曲圖像特效

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)旋轉(zhuǎn)扭曲圖像特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C# WebApi CORS跨域問題解決方案

    C# WebApi CORS跨域問題解決方案

    本篇文章主要介紹了C# WebApi CORS跨域問題解決方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 淺析C#的復(fù)制和克隆

    淺析C#的復(fù)制和克隆

    這篇文章主要介紹了淺析C#的復(fù)制和克隆,需要的朋友可以參考下
    2014-07-07
  • C#泛型約束的深入理解

    C#泛型約束的深入理解

    本篇文章是對C#中的泛型約束進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C# 實現(xiàn)WebSocket服務(wù)端教程

    C# 實現(xiàn)WebSocket服務(wù)端教程

    這篇文章主要介紹了C# 實現(xiàn)WebSocket服務(wù)端教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • C#實現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解

    C#實現(xiàn)數(shù)字轉(zhuǎn)換漢字的示例詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)數(shù)字轉(zhuǎn)換漢字功能,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • c#字符串去掉空格的二種方法(去掉兩端空格)

    c#字符串去掉空格的二種方法(去掉兩端空格)

    本文主要介紹了字符串去掉兩端空格,并且將字符串中多個空格替換成一個空格的方法,需要的朋友可以參考下
    2014-02-02

最新評論

高尔夫| 翁牛特旗| 罗源县| 阿拉尔市| 图们市| 邮箱| 温泉县| 九江县| 咸丰县| 东平县| 荣昌县| 三明市| 巴林右旗| 南汇区| 西青区| 望谟县| 临沧市| 沙雅县| 乐都县| 郁南县| 寻乌县| 富源县| 崇州市| 永年县| 福安市| 吉首市| 两当县| 华宁县| 达尔| 富阳市| 潜江市| 绍兴市| 荆州市| 永登县| 顺平县| 司法| 普兰店市| 邵阳县| 石棉县| 洛隆县| 工布江达县|