在基类构造器中调用虚方法需谨慎

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

在基类构造器中调用虚方法需谨慎最近,在基类的构造函数中调用虚方法时,发现了一个问题。先把问题重现如下:

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) →先调用父类无参构造函数,并调用虚方法

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航