在C ++中从基类ctor中调用虚方法永远不会调用派生的覆盖。
在Java中确实如此。
C#怎么样? (没有安装Visual Studio的工作室)
答案 0 :(得分:4)
是的,它确实在C#中 - 即使它正在被构造,该对象也是它的“最终类型”。
就像在Java中一样,这是一个坏主意,应该尽可能避免,因为您可能正在调用在继承“级别”上实现的方法,该级别尚未针对该对象进行完全初始化。
Java和C#之间的执行顺序的一个区别在于,在C#中,带有初始化程序的实例变量,如下所示:
private readonly DateTime creationTime = DateTime.UtcNow;
...并在基类构造函数执行之前初始化,而在Java中,它们在子类构造函数的主体之前有效执行,在超类之后执行构造函数执行。