using System;namespace Zhisi.Net
{
class A
{
publicvirtualvoid Func() // 注意virtual,表明這是一個虛擬函數{
Console.WriteLine("Func In A");
}
}class B : A // 注意B是從A類繼承,所以A是父類,B是子類{
publicoverridevoid Func() // 注意override ,表明重新實現了虛函數{
Console.WriteLine("Func In B");
}
}class C : B // 注意C是從A類繼承,所以B是父類,C是子類{
}class D : A // 注意B是從A類繼承,所以A是父類,D是子類{
publicnewvoid Func() // 注意new ,表明覆蓋父類里的同名類,而不是重新實現{
Console.WriteLine("Func In B");
}
}class program
{
staticvoid Main()
{
A a; // 定義一個a這個A類的對象.這個A就是a的申明類
A b; // 定義一個b這個A類的對象.這個A就是b的申明類
A c; // 定義一個c這個A類的對象.這個A就是b的申明類
A d; // 定義一個d這個A類的對象.這個A就是b的申明類
a = new A(); // 實例化a對象,A是a的實例類
b = new B(); // 實例化b對象,B是b的實例類
c = new C(); // 實例化b對象,C是b的實例類
d = new D(); // 實例化b對象,D是b的實例類
a.Func(); // 執行a.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類A,就為本身 4.執行實例類A中的方法 5.輸出結果 Func In A
b.Func(); // 執行b.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類B,有重載的 4.執行實例類B中的方法 5.輸出結果 Func In B
c.Func(); // 執行c.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類C,無重載的 4.轉去檢查類C的父類B,有重載的 5.執行父類B中的Func方法 5.輸出結果 Func In B
d.Func(); // 執行d.Func:1.先檢查申明類A 2.檢查到是虛擬方法 3.轉去檢查實例類D,無重載的(這個地方要注意了,雖然D里有實現Func(),但沒有使用override關鍵字,所以不會被認為是重載) 4.轉去檢查類D的父類A,就為本身 5.執行父類A中的Func方法 5.輸出結果 Func In A
D d1 = new D();
d1.Func(); // 執行D類里的Func(),輸出結果 Func In DConsole.ReadLine();
}
}
}View Code