欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別

 更新時間:2017年02月11日 11:35:29   作者:葉丶梓軒  
本篇文章主要介紹了詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧。

一,抽象的實現(xiàn)

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"); }//如果一個虛函數(shù) 在子類中沒有通過override關(guān)鍵字,那么這個方法就沒有被重寫,而是被隱藏了
    public override void MethodB() { Console.WriteLine("MethodB"); }
    public override void MethodC() { base.MethodC(); }
  }
}

從上圖得出的結(jié)果是:

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

二,new和override重寫的區(qū)別:

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("學(xué)生都要考試");
    }
    public void Say()
    {
      Console.WriteLine("我是學(xué)生");
    }
  }
  public class Teacher : Student
  {
    public override void Exam()
    {
      Console.WriteLine("老師不用考試");
    }
    //public override void Say() //報錯,提示沒有virtual,無法被重寫
    //{
    //  Console.WriteLine("我是老師");
    //}
    public new void Say()
    {
      Console.WriteLine("我是老師");
    }
  }
}

結(jié)果顯示為:

綜上總結(jié):

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論