从基类ctor中调用虚拟方法

本文关键字:虚拟 方法 调用 基类 ctor | 更新日期: 2023-09-27 18:23:40

在C++中,从基类ctor中调用虚拟方法永远不会调用派生重写。

在Java中确实如此。

C#怎么样?(没有安装visual studio ATM)

从基类ctor中调用虚拟方法

是的,它在C#中是这样做的——即使在构建对象时,对象也是其"最终类型"。

就像在Java中一样,这是一个坏主意,应该尽可能避免,因为您可能正在调用在继承"级别"上实现的方法,而该对象尚未完全初始化。

Java和C#在执行顺序上的一个区别是,在C#中,带有初始化器的实例变量如下:

private readonly DateTime creationTime = DateTime.UtcNow;

并在基类构造函数执行之前初始化,而在Java中,它们有效地在子类构造函数的主体之前执行,在超类构造函数执行之后执行。