詳解C#用new和override來實現(xiàn)抽象類的重寫區(qū)別
一,抽象的實現(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í)有所幫助,也希望大家多多支持腳本之家。
- C# 重寫ComboBox實現(xiàn)下拉任意組件的方法
- C#重寫DataGridView
- 在C#的類或結(jié)構(gòu)中重寫ToString方法的用法簡介
- C#通過重寫Panel改變邊框顏色與寬度的方法
- c#方法重寫和隱藏的學(xué)習(xí)示例
- c#重寫TabControl控件實現(xiàn)關(guān)閉按鈕的方法
- C#中重載與重寫區(qū)別分析
- C#運算符重載用法實例分析
- C#中重載相等(==)運算符示例
- C#中多態(tài)、重載、重寫區(qū)別分析
- C#重載運算符詳解
- 基于C#方法重載的總結(jié)詳解
- c# 重載WndProc,實現(xiàn)重寫“最小化”的實現(xiàn)方法
- C#中重載重寫和覆蓋的定義與區(qū)別
相關(guān)文章
通過容器擴(kuò)展屬性IExtenderProvider實現(xiàn)WinForm通用數(shù)據(jù)驗證組件
這篇文章介紹了通過容器擴(kuò)展屬性IExtenderProvider實現(xiàn)WinForm通用數(shù)據(jù)驗證組件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12C# 延遲Task.Delay()和Thread.Sleep()的具體使用
Thread.Sleep()是同步延遲,Task.Delay()是異步延遲,本文主要介紹了C# 延遲Task.Delay()和Thread.Sleep()的具體使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-01-01DevExpress之ChartControl用法實例總結(jié)
這篇文章主要介紹了DevExpress之ChartControl用法實例總結(jié),需要的朋友可以參考下2014-08-08C#影院售票系統(tǒng)畢業(yè)設(shè)計(1)
這篇文章主要介紹了C#影院售票系統(tǒng)畢業(yè)設(shè)計,獻(xiàn)上了9個類的設(shè)計,需要的朋友可以參考下2015-11-11C#實現(xiàn)將數(shù)據(jù)導(dǎo)出到word或者Excel中的方法
這篇文章主要介紹了C#實現(xiàn)將數(shù)據(jù)導(dǎo)出到word或者Excel中的方法,涉及C#操作word及Excel格式文件的方法,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08