日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

[C#]关于override和new在重写方法时的区别

發布時間:2025/4/14 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C#]关于override和new在重写方法时的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

規則:

  • 在“運行時”遇到虛方法時,對象會調用虛成員派生得最遠的、重寫的實現。
  • ?如果是用new修飾符實現的方法,它會在基類面前隱藏派生類重新聲明的成員,這時候會找到使用new修飾符的成員之前的成員,然后調用它。
  • 一定要顯式地使用override關鍵字來重寫方法,如果沒有使用override,也沒有使用new,則會默認使用new。
  • ?


    例子:

    using System; using System.Collections.Generic;namespace ConsoleApp1 {class A { public void Test() { Console.WriteLine("A"); } }class B : A { public virtual void Test() { Console.WriteLine("B"); } }class C : B { public override void Test() { Console.WriteLine("C"); } }class D : C { public new void Test() { Console.WriteLine("D"); } }class Program{static void Main(){D d = new D();C c = d;B b = d;A a = d;d.Test();c.Test();b.Test(); a.Test();}} }

    最后的輸出結果為:

    D C C A(省略回車)

    分析:

    • 第一個D:沒有派生類,所以沒有重載。
    • 第二個C:有派生類,但是使用了new修飾符對基類隱藏了重寫的方法。
    • 第三個C:有派生類,并且使用override修飾,這是它尋找到最遠的派生的成員,因此輸出了C。
    • 第四個A:A的方法非虛,因此輸出的是A。

    ?

    ?

    ?

    ?

    轉載于:https://www.cnblogs.com/lizhenghao126/p/11053665.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的[C#]关于override和new在重写方法时的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。