最近,在基類的構造函數中調用虛方法時,發現了一個問題。先把問題重現如下:
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));}}
運行以上的代碼,結果會是以下兩種情況之一嗎?基類說我今年18歲了子類說我今年18歲了
都不是!而是:
為什么? →調用子類構造函數new Chinese(18)
→先調用父類無參構造函數,并調用虛方法
新聞熱點
疑難解答