在C#中,从构造函数调用虚拟方法是否安全

本文关键字:虚拟 函数调用 方法 是否 安全 | 更新日期: 2023-09-27 18:00:07

可能重复:
构造函数中的虚拟成员调用

在C#中,从构造函数调用虚拟方法安全吗?语言规范说明了什么?请同时从规格中报价。所谓的safe,我的意思是它会调用派生类的实现吗?

这个疑问存在于我的脑海中,因为在C++中,从构造函数调用虚拟函数是不安全的。

在C#中,从构造函数调用虚拟方法是否安全

你可以做到,但不应该。我认为C#甚至会给你一个警告。

当函数被派生类重写时,这将变得非常危险,因为在调用派生类的构造函数之前,您现在正在调用该函数。

这是不安全的,因为在匹配的构造函数有机会建立类不变量之前就会调用虚拟函数。

相反,在C++中是安全的——被调用的函数是在匹配构造函数期间调用的,而不是之前调用的。