从基类ctor中调用虚方法

时间:2012-02-07 07:30:09

标签: c# oop

在C ++中从基类ctor中调用虚方法永远不会调用派生的覆盖。

在Java中确实如此。

C#怎么样? (没有安装Visual Studio的工作室)

1 个答案:

答案 0 :(得分:4)

是的,它确实在C#中 - 即使它正在被构造,该对象也是它的“最终类型”。

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

Java和C#之间的执行顺序的一个区别在于,在C#中,带有初始化程序的实例变量,如下所示:

private readonly DateTime creationTime = DateTime.UtcNow;

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