2011-06-24 32 views
2

可能重複:
Virtual member call in a constructor在C#中,從構造函數調用虛方法是否安全?

在C#中,它是安全調用構造函數從虛方法?語言規範說什麼?請從規格中引用。通過安全,我的意思是它會調用派生類的實現?

這種懷疑存在於我的腦海裏,因爲在C++中,它是安全地從構造函數中調用虛函數。

+0

好吧!重複存在。然後投票結果! – Nawaz

+0

我已經擁有。 –

+1

爲什麼將「安全」定義爲調用派生類的實現?人們可以做出合理的論點,即C++的技術(根據類的哪些部分被初始化調用方法實現)是更安全的選擇。 –

回答

6

你可以做到,但你不應該這樣做。我認爲C#甚至會給你一個警告。

當函數被派生類覆蓋時,它變得非常危險,因爲在派生類的構造函數被調用之前,您現在正在調用該函數。

+0

在C++中,不會調用派生類實現,正是出於這個原因。 –

+0

@Ben更正,謝謝。 – Shirik

+2

在C++內存中可能未完全初始化,但在C#中這不是問題。 – Gabe

1

這是不安全的,因爲在匹配的構造函數有機會建立類不變量之前調用虛函數。

相反,它在C++中是安全的 - 調用的函數在匹配構造函數中調用,而不是在之前調用。

+0

我編輯了我的問題,說我的意思是「安全」。 – Nawaz

相關問題