从基类ctor中调用虚拟方法
本文关键字:虚拟 方法 调用 基类 ctor | 更新日期: 2023-09-27 18:23:40
在C++中,从基类ctor中调用虚拟方法永远不会调用派生重写。
在Java中确实如此。
C#怎么样?(没有安装visual studio ATM)
是的,它在C#中是这样做的——即使在构建对象时,对象也是其"最终类型"。
就像在Java中一样,这是一个坏主意,应该尽可能避免,因为您可能正在调用在继承"级别"上实现的方法,而该对象尚未完全初始化。
Java和C#在执行顺序上的一个区别是,在C#中,带有初始化器的实例变量如下:
private readonly DateTime creationTime = DateTime.UtcNow;
并在基类构造函数执行之前初始化,而在Java中,它们有效地在子类构造函数的主体之前执行,在超类构造函数执行之后执行。