本篇文章主要介紹了詳解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並不叫重寫,而是子類新建立一個方法,只是新建立的這個方法剛好跟基類中的方法同名
以上就是詳解C#用new和override來實現抽象類別的重寫區別的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!