2009-08-14 71 views
2

有沒有一種方法來初始化虛擬自動屬性,而不使用構造? 或者我應該只是做一個私人領域?如何初始化虛擬自動屬性?

+0

我不明白的問題,強調_virtual_。如果不使用構造函數,則無法初始化非虛擬自動屬性。 – 2009-08-14 20:11:03

+0

因爲它是不好的調用虛擬成員調用構造函數中:) – 2009-08-14 20:19:01

回答

7

虛擬與否,你需要一個構造函數。或者它將具有它的類型的默認值。


因爲這是不好的調用虛擬成員在構造函數中

正確,你將不得不認真步驟。正常規則適用。爲了安全起見,你要設計你的屬性,以便它不需要初始化,或者只在類或屬性被密封的派生構造函數中初始化它。

3

注意,將有大量的病例,其中自動屬性使得幾乎沒有任何意義。

在虛擬自動屬性的情況下,我會說,初始化部分,使這個問題,並會刪除「自動」的一部分,並創建一個支持字段。

當然,因爲在構造函數之前調用基構造函數,所以如果基構造函數將該屬性初始化爲錯誤的值,後構造函數有可能在構造該對象之前糾正這個錯誤。

+1

是的,但假設一個派生類中實現更復雜的getter或setter,依靠派生類的其他領域。那些其他領域將不會被初始化。 – 2009-08-14 20:58:46

+0

同意,但這是從構造函數的角度來看所有虛擬代碼的問題。 – 2009-08-15 11:26:30

+1

爲了記錄,我認爲創建一個最實用的解決方案支持領域。 – 2009-08-15 19:14:21