程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 詳解C#用new和override來實現抽象類的重寫區別

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

編輯:C#入門知識

詳解C#用new和override來實現抽象類的重寫區別。本站提示廣大學習愛好者:(詳解C#用new和override來實現抽象類的重寫區別)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C#用new和override來實現抽象類的重寫區別正文


一,抽象的實現

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(); }
  }
}

從上圖得出的結果是:

綜上:抽象類的虛方法需要被重寫,那問題來了重寫有兩種方式,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("我是老師");
    }
  }
}

結果顯示為:

綜上總結:

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved