<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#中的virtual和override關鍵字

      ??公眾號「DotNet學習交流」,分享學習DotNet的點滴。

      使用基類中的引用

      代碼如下:

      class MyBaseClass //基類
        {
             public void Print()
            {
                 Console.WriteLine("This is the base class");
            }
             
        }
      ?
         class MyDerivedClass : MyBaseClass //派生類
        {
            new public void Print()
            {
                 Console.WriteLine("This is the derived class");
            }
        }
         
         internal class Program
        {
             static void Main(string[] args)
            {
                 MyDerivedClass myDerived = new MyDerivedClass();
                 MyBaseClass myBaseClass = (MyBaseClass)myDerived; //轉換成基類
                             myDerived.Print(); //從派生類部分調用Print方法
                             myBaseClass.Print(); //從基類部分調用Print方法
            }
        }

      運行結果如下:

      image-20231113203318239

      可以發現派生類調用的是派生類的方法,而基類調用的是基類的方法。

      虛方法和覆寫方法

      虛方法可以使基類的引用訪問“升至”派生類內,可以使基類引用調用派生類(derived class)的方法,只需滿足下面的條件。

      1、派生類的方法和基類的方法有相同的簽名和返回類型。

      2、基類的方法使用virtual標注。

      3、派生類的方法使用override標注。

      使用virtual和override的例子如下:

      class MyBaseClass //基類
        {
             virtual public void Print()
            {
                 Console.WriteLine("This is the base class");
            }
             
        }
      ?
         class MyDerivedClass : MyBaseClass //派生類
        {
            override public void Print()
            {
                 Console.WriteLine("This is the derived class");
            }
        }
         class SecondDerivedClass : MyDerivedClass //派生類
        {
             override public void Print()
            {
                 Console.WriteLine("This is the second derived class");
            }
        }
      ?
         internal class Program
        {
             static void Main(string[] args)
            {
                 SecondDerivedClass myDerived = new SecondDerivedClass();
                 MyBaseClass myBaseClass = (MyBaseClass)myDerived; //轉換成基類
                             myDerived.Print(); //從派生類部分調用Print方法
                             myBaseClass.Print(); //從基類部分調用Print方法
            }
        }

      運行結果如下所示:

      image-20231113210108171

      不論是通過派生類調用還是通過基類調用,都會調用最高派生類中的方法,當通過基類調用時,調用被沿著繼承層次向上傳遞,如下圖所示:

      image-20231113205459478

      SecondDerivedClass中的Print方法聲明為override,它會覆寫方法中的全部兩個低派生級別的版本。

      如果將SecondDerivedClass中的Print方法聲明為new,代碼如下所示:

       class MyBaseClass //基類
        {
             virtual public void Print()
            {
                 Console.WriteLine("This is the base class");
            }
             
        }
      ?
         class MyDerivedClass : MyBaseClass //派生類
        {
            override public void Print()
            {
                 Console.WriteLine("This is the derived class");
            }
        }
         class SecondDerivedClass : MyDerivedClass //派生類
        {
             new public void Print()
            {
                 Console.WriteLine("This is the second derived class");
            }
        }
      ?
         internal class Program
        {
             static void Main(string[] args)
            {
                 SecondDerivedClass myDerived = new SecondDerivedClass();
                 MyBaseClass myBaseClass = (MyBaseClass)myDerived; //轉換成基類
                             myDerived.Print(); //從派生類部分調用Print方法
                             myBaseClass.Print(); //從基類部分調用Print方法
            }
        }

      運行結果如下所示:

      image-20231113210250760

      當Print方法通過SecondDerivedClass的引用調用時,SecondDerivedClass中的方法被執行,而當方法通過MyBaseClass的引用調用時,方法調用只向上傳遞了一級,到達類MyDerivedClass,在那里被執行。該過程的圖示如下所示:

      image-20231113210605164

      覆蓋其他成員類型

      其實屬性事件以及索引器也是一樣。

      只讀屬性使用virtual/override的例子

      代碼如下:

       class MyBaseClass //基類
        {
             private int _myInt = 5;
             virtual public int MyProperty
            {
                get { return _myInt; }
            }
             
        }
      ?
         class MyDerivedClass : MyBaseClass //派生類
        {
             private int _myInt = 10;
             override public int MyProperty
            {
                 get { return _myInt; }
            }
        }
       
      ?
         internal class Program
        {
             static void Main(string[] args)
            {
                 MyDerivedClass myDerived = new MyDerivedClass();
                 MyBaseClass myBaseClass = (MyBaseClass)myDerived; //轉換成基類
                 Console.WriteLine(myDerived.MyProperty);
                 Console.WriteLine(myBaseClass.MyProperty);
            }
        }

      運行結果如下所示:

      image-20231114100512567

       
      posted @ 2023-11-17 09:52  mingupupup  閱讀(870)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成安县| 日韩av一区二区精品不卡| 亚洲免费成人av一区| 亚洲va在线∨a天堂va欧美va| 三男一女吃奶添下面视频| 亚洲男女一区二区三区| 亚洲国产精品特色大片观看完整版| 亚洲国产色婷婷久久99精品91| 又黄又爽又色的少妇毛片| 国产欧美VA天堂在线观看视频| 禄丰县| 亚洲最大av一区二区| 国产精品自在拍首页视频8 | 国产精品爽黄69天堂a| 国产二区三区不卡免费| 国产一区二区三区精品综合| 日本免费观看mv免费版视频网站| 亚洲人成网线在线播放VA | 国产午夜福利视频在线观看| 亚洲精品无码av天堂| 日韩中文字幕精品人妻| 欧洲女人牲交性开放视频| 久久久精品94久久精品| 双乳奶水饱满少妇呻吟免费看| 国产激情文学亚洲区综合| 国产极品精品自在线不卡| 极品少妇的粉嫩小泬看片| 黑人欧美一级在线视频| 国产丝袜在线精品丝袜不卡 | 国偷自产av一区二区三区| 国产精品成人网址在线观看| 国产精品中文一区二区| 国产成人无码免费视频麻豆| 粉嫩小泬无遮挡久久久久久| 亚洲国产精品一二三四五| 精品久久久久无码| 韩国无码AV片午夜福利| 国产老熟女国语免费视频| jizz视频在线观看| 日韩高清国产中文字幕| 国产仑乱无码内谢|