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

时间:2011-06-24 04:21:31

标签: c# constructor polymorphism virtual

  

可能重复:
  Virtual member call in a constructor

在C#中,从构造函数调用虚方法是否安全?语言规范说什么?请从规范中引用。通过 safe ,我的意思是它会调用派生类的实现吗?

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

2 个答案:

答案 0 :(得分:6)

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

当函数被派生类覆盖时,它变得非常危险,因为您现在在调用派生类的构造函数之前调用该函数。

答案 1 :(得分:1)

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

相比之下,它在C ++中是安全的 - 被调用的函数在匹配构造函数中被调用,而不是之前。