最近,在基類的構(gòu)造函數(shù)中調(diào)用虛方法時,發(fā)現(xiàn)了一個問題。先把問題重現(xiàn)如下:
class PRogram{static void Main(string[] args){var c = new Chinese(18);Console.ReadKey();}}public class People{public int Age { get; protected set; }protected People(){this.Say();}public virtual void Say(){Console.WriteLine(string.Format("基類說我今年{0}歲了", Age));}}public class Chinese : People{public Chinese(int age){this.Age = age;}public override void Say(){Console.WriteLine(string.Format("子類說我今年{0}歲了",Age));}}
運(yùn)行以上的代碼,結(jié)果會是以下兩種情況之一嗎?基類說我今年18歲了子類說我今年18歲了
都不是!而是:
為什么? →調(diào)用子類構(gòu)造函數(shù)new Chinese(18) →先調(diào)用父類無參構(gòu)造函數(shù),并調(diào)用虛方法
新聞熱點(diǎn)
疑難解答
圖片精選