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

C#中Abstract方法和Virtual方法的區(qū)別

 更新時間:2022年04月18日 08:43:16   作者:農(nóng)碼一生  
這篇文章介紹了C#中Abstract方法和Virtual方法的區(qū)別,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介:

c#中Abstract和Virtual比較容易混淆,都與繼承有關,并且涉及override的使用。virtual可以被子類重寫,而abstract必須被子類重寫。virtual修飾的方法必須有實現(xiàn)(哪怕是僅僅添加一對大括號),而abstract修飾的方法一定不能實現(xiàn)。它們有一個共同點:如果用來修飾方法,前面必須添加public,要不然就會出現(xiàn)編譯錯誤:虛擬方法或抽象方法是不能私有的。畢竟加上virtual或abstract就是讓子類重新定義的,而private成員是不能被子類訪問的。下面討論一下二者的區(qū)別:

一、Virtual方法(虛方法)

virtual 關鍵字用于在基類中修飾方法。virtual的使用會有兩種情況:
情況1:在基類中定義了virtual方法,但在派生類中沒有重寫該虛方法。那么在對派生類實例的調(diào)用中,該虛方法使用的是基類定義的方法。
情況2:在基類中定義了virtual方法,然后在派生類中使用override重寫該方法。那么在對派生類實例的調(diào)用中,該虛方法使用的是派生重寫的方法。

virtual可以被子類重寫:

    class BaseTest1
    {
       public virtual void fun() { }//必須有實現(xiàn)
    }
    class DeriveTest1:BaseTest1
    {
        //public override void fun() { }
    }

virtual修飾的方法必須有實現(xiàn)(哪怕是僅僅添加一對大括號):

    public class Test1
    {
        public virtual void fun1(){}
    }

二、Abstract方法(抽象方法)

abstract關鍵字只能用在抽象類中修飾方法,并且沒有具體的實現(xiàn)。抽象方法的實現(xiàn)必須在派生類中使用override關鍵字來實現(xiàn)。
接口和抽象類最本質(zhì)的區(qū)別:抽象類是一個不完全的類,是對對象的抽象,而接口是一種行為規(guī)范。

abstract必須被子類重寫:

    abstract class BaseTest2
    {
        public abstract void fun();
    }
    class DeriveTest2 : BaseTest2
    {
        //public override void fun();錯誤1:沒有實現(xiàn)
        //public  void fun() { }  錯誤2:重寫時沒有添加override
        //override void fun() { }錯誤3:虛擬成員或者抽象成員不能是私有的(只要在父類中聲明了虛擬成員或抽象成員,即便是繼承的也要加上這個限制)
        public override void fun() { }//如果重寫方法; 錯誤:“A.DeriveTest2”不實現(xiàn)繼承的抽象成員“A.BaseTest2.fun()”    

    }

abstract修飾的方法一定不能實現(xiàn):

    public abstract class Test2
    {
        public abstract void fun2() ;
    }

三、關鍵字

Static:當一個方法被聲明為Static時,這個方法是一個靜態(tài)方法,編譯器會在編譯時保留這個方法的實現(xiàn)。也就是說,這個方法屬于類,但是不屬于任何成員,不管這個類的實例是否存在,它們都會存在。就像入口函數(shù)Static void Main,因為它是靜態(tài)函數(shù),所以可以直接被調(diào)用。

Virtua:當一個方法被聲明為Virtual時,它是一個虛擬方法,直到你使用ClassName variable = new ClassName();聲明一個類的實例之前,它都不存在于真實的內(nèi)存空間中。這個關鍵字在類的繼承中非常常用,用來提供類方法的多態(tài)性支持。

overrride:表示重寫 這個類是繼承于Shape類
virtual,abstract是告訴其它想繼承于他的類 你可以重寫我的這個方法或?qū)傩?,否則不允許。
abstract:抽象方法聲明使用,是必須被派生類覆寫的方法,抽象類就是用來被繼承的;可以看成是沒有實現(xiàn)體的虛方法;如果類中包含抽象方法,那么類就必須定義為抽象類,不論是否還包含其他一般方法;抽象類不能有實體的。

以上所述是小編給大家介紹的C#中Abstract方法和Virtual方法的區(qū)別,希望對大家有所幫助。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • c#獲得目標服務器中所有數(shù)據(jù)庫名、表名、列名的實現(xiàn)代碼

    c#獲得目標服務器中所有數(shù)據(jù)庫名、表名、列名的實現(xiàn)代碼

    這篇文章主要介紹了c#獲得目標服務器中所有數(shù)據(jù)庫名、表名、列名的方法,需要的朋友可以參考下
    2014-05-05
  • C#計算矩陣的逆矩陣方法實例分析

    C#計算矩陣的逆矩陣方法實例分析

    這篇文章主要介紹了C#計算矩陣的逆矩陣方法,較為詳細的分析了逆矩陣的計算原理與相關的C#實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C# 8.0可空引用類型的使用注意記錄

    C# 8.0可空引用類型的使用注意記錄

    這篇文章主要給大家介紹了關于C# 8.0可空引用類型使用注意的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用C#具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-04-04
  • asp.net之生成驗證碼的方法集錦(一)

    asp.net之生成驗證碼的方法集錦(一)

    現(xiàn)在很多網(wǎng)站都有注冊登錄的頁面,為了更好的滿足用戶體驗和網(wǎng)站的安全性,很多網(wǎng)站都采用動態(tài)生成的圖形碼或者是附加碼進行驗證,這篇文章主要就是介紹生成驗證碼的方法,需要的朋友可以參考下
    2015-08-08
  • 關于C#連接SQL Server時提示用戶登錄失敗的解決方法

    關于C#連接SQL Server時提示用戶登錄失敗的解決方法

    在用C#開發(fā)windows端程序并連接SQL Server時有可能會遇到數(shù)據(jù)庫登錄失敗的問題,下面小編給大家?guī)砹薈#連接SQL Server時提示用戶登錄失敗的解決方法,感興趣的朋友一起看看吧
    2021-11-11
  • C# 顯示、隱藏窗口對應的任務欄

    C# 顯示、隱藏窗口對應的任務欄

    WPF中全屏窗口,會自動隱藏任務欄,那非全屏窗口如何隱藏任務欄?甚至有沒有一種場景,隱藏任務后自定義一套系統(tǒng)任務欄來顯示?這篇文章主要介紹了C# 顯示、隱藏窗口對應的任務欄,需要的朋友可以參考下
    2021-10-10
  • C#使用foreach循環(huán)遍歷數(shù)組完整實例

    C#使用foreach循環(huán)遍歷數(shù)組完整實例

    這篇文章主要介紹了C#使用foreach循環(huán)遍歷數(shù)組,結(jié)合完整實例形式較為詳細的分析了C#遍歷數(shù)組的相關技巧,需要的朋友可以參考下
    2016-06-06
  • C# winForm實現(xiàn)的氣泡提示窗口功能示例

    C# winForm實現(xiàn)的氣泡提示窗口功能示例

    這篇文章主要介紹了C# winForm實現(xiàn)的氣泡提示窗口功能,涉及C# winForm窗口屬性與設置相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • C#基礎語法:Base關鍵字學習筆記

    C#基礎語法:Base關鍵字學習筆記

    這篇文章主要介紹了C#基礎語法:Base關鍵字學習筆記,本文講解了它的一些基礎知識以及測試代碼,需要的朋友可以參考下
    2015-06-06
  • C#中 Json 序列化去掉null值的方法

    C#中 Json 序列化去掉null值的方法

    要將一個對象序列化,可是如果對象的屬性為null的時候,我們想將屬性為null的都去掉,怎么處理呢?其實方法很簡單的,下面就跟隨腳本之家小編一起學習C#中 Json 序列化去掉null值的方法吧
    2017-09-09

最新評論

通化市| 德安县| 五家渠市| 颍上县| 荃湾区| 故城县| 革吉县| 扎赉特旗| 大城县| 桂林市| 昌邑市| 灵璧县| 安达市| 兴义市| 穆棱市| 龙陵县| 忻州市| 濮阳市| 安塞县| 嘉峪关市| 略阳县| 双城市| 韶关市| 洛川县| 丘北县| 宽甸| 紫金县| 左贡县| 葵青区| 汉中市| 安义县| 内黄县| 松原市| 长宁区| 沁水县| 通州区| 荆门市| 嘉荫县| 伊春市| 正定县| 来宾市|