詳解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)文章
c# wpf使用GMap.NET類庫,實現(xiàn)地圖軌跡回放
這篇文章主要介紹了c# wpf使用GMap.NET類庫,實現(xiàn)地圖軌跡回放的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03
C#中Write()和WriteLine()的區(qū)別分析
這篇文章主要介紹了C#中Write()和WriteLine()的區(qū)別分析,需要的朋友可以參考下2020-11-11
C#程序中session的基本設(shè)置示例及清除session的方法
這篇文章主要介紹了C#程序中session的基本設(shè)置示例及清除session的方法,是C#入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-04-04
C#跨PC遠(yuǎn)程調(diào)用程序并顯示UI界面
這篇文章主要為大家介紹了使用C#跨PC遠(yuǎn)程調(diào)用程序并顯示UI界面,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

