1、重寫(xiě)(override):子類(lèi)中為滿(mǎn)足自己的需要來(lái)重復定義某個(gè)方法的不同實(shí)現,需要用 override 關(guān)鍵字,被重寫(xiě)的方法必須是虛方法,用的是 virtual 關(guān)鍵字。它的特點(diǎn)是(三個(gè)相同):
相同的方法名
相同的參數列表
相同的返回值
如:父類(lèi)中的定義:
public virtual void EatFood()子類(lèi)中的定義:
public override void EatFood()小提示:經(jīng)常有童鞋問(wèn)重載和重寫(xiě)的區別,而且網(wǎng)絡(luò )上把這兩個(gè)的區別作為 C# 做??嫉拿嬖囶}之一。實(shí)際上這兩個(gè)概念完全沒(méi)有關(guān)系,僅僅都帶有一個(gè)"重"字。他們沒(méi)有在一起比較的意義,僅僅分辨它們不同的定義就好了。
3、虛方法:即為基類(lèi)中定義的允許在派生類(lèi)中重寫(xiě)的方法,使用virtual關(guān)鍵字定義。如:
public virtual void EatFood()注意:虛方法也可以被直接調用。如:
Animal a = new Animal();執行輸出結果為:
Animal吃東西完整代碼:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;
namespace WindowsFormsApp4{ public partial class Form1 : Form { public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) {
}
private void button1_Click(object sender, EventArgs e) { test2 t2 = new test2(); t2.EatFood();
test1 t1 = new test1();//虛方法也可以被直接調用 t1.EatFood(); } }
// 對于類(lèi)來(lái)說(shuō),如果你沒(méi)有寫(xiě)訪(fǎng)問(wèn)修飾符,那么是internal的,只有程序集內部可以訪(fǎng)問(wèn)! //對于類(lèi)的成員(字段, 屬性, 方法等),如果你沒(méi)有寫(xiě)訪(fǎng)問(wèn)修飾符,那么是private的! class test1 { public virtual void EatFood() //父類(lèi)中的定義:基類(lèi)中定義的允許在派生類(lèi)中重寫(xiě)的方法,使用virtual關(guān)鍵字定義 { MessageBox.Show("Animal吃東西"); }
} partial class test2 : test1 { public override void EatFood() // 子類(lèi)中的定義:子類(lèi)中為滿(mǎn)足自己的需要來(lái)重復定義某個(gè)方法的不同實(shí)現 { MessageBox.Show("Cat吃東西"); //base.EatFood(); } }
}
運行結果:
聯(lián)系客服