国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

詳解C#用new和override來實現抽象類的重寫區別

2019-10-29 21:13:58
字體:
來源:轉載
供稿:網友

一,抽象的實現

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Virtualdemo{  class Program  {    static void Main(string[] args)    {//BClass A = new BClass(); 抽象類無法被實例      Class1 c = new Class1();      BClass c2 = c;      c2.MethodA();      c.MethodA();      c2.MethodB();      c.MethodB();      c2.MethodC();      c.MethodC();      Console.ReadKey();    }  }  abstract class BClass  //抽象類無法被實例  {    public virtual void MethodA() { Console.WriteLine("BClassA"); }    public virtual void MethodB() { Console.WriteLine("BClassB"); }    public virtual void MethodC() { Console.WriteLine("BClassC"); }  }  class Class1 : BClass  {    public void MethodA() { Console.WriteLine("MethodA"); }//如果一個虛函數 在子類中沒有通過override關鍵字,那么這個方法就沒有被重寫,而是被隱藏了    public override void MethodB() { Console.WriteLine("MethodB"); }    public override void MethodC() { base.MethodC(); }  }}

從上圖得出的結果是:

c#,new,override,override重寫方法,new和override

綜上:抽象類的虛方法需要被重寫,那問題來了重寫有兩種方式,new和override又有什么區別

二,new和override重寫的區別:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Virtualdemo{  class Program  {    static void Main(string[] args)    {      Teacher t = new Teacher();      Student stu = t;      stu.Exam();      stu.Say();      t.Say();      Console.ReadKey();    }  }  public abstract class Student  {    public virtual void Exam()    {      Console.WriteLine("學生都要考試");    }    public void Say()    {      Console.WriteLine("我是學生");    }  }  public class Teacher : Student  {    public override void Exam()    {      Console.WriteLine("老師不用考試");    }    //public override void Say() //報錯,提示沒有virtual,無法被重寫    //{    //  Console.WriteLine("我是老師");    //}    public new void Say()    {      Console.WriteLine("我是老師");    }  }}

結果顯示為:

c#,new,override,override重寫方法,new和override

綜上總結:

1、如果基類沒有定義虛方法,那子類只能使用new,而不能使用override

2、基類有沒有定義虛方法,子類都可以使用new

3、子類使用new并不叫重寫,而是子類新創建一個方法,只是新創建的這個方法剛好跟基類中的方法同名

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏南县| 富平县| 称多县| 丹棱县| 江口县| 彭州市| 道真| 墨玉县| 武夷山市| 海伦市| 东平县| 磐石市| 垣曲县| 桑日县| 三门峡市| 颍上县| 泽州县| 和田县| 福海县| 水城县| 句容市| 达州市| 敖汉旗| 会昌县| 大足县| 沾化县| 长宁县| 汝城县| 天等县| 噶尔县| 舞阳县| 淅川县| 建昌县| 武乡县| 鄯善县| 鹤庆县| 黑山县| 特克斯县| 筠连县| 贵德县| 通河县|