2010-03-22 20 views

回答

12

是的,基類要求參數化構造函數是可以接受的。這只是強制要求任何繼承的類都必須向基構造器提供一個值。

+0

哇,快速響應。 現在我可以繼續編碼... – 2010-03-22 15:06:53

1

這是可以接受的。是否需要或有用完全取決於類的(設計)。

+0

好了,4 OK肯定比1好。 – 2010-03-22 15:09:59

2

在大多數情況下,派生類具有某種形式的參數化構造函數。 所以,當這些構造函數的調用,他們仍然可以調用參數的基類的構造:

public employee(int age) : base(this) 

答案是如果你需要一個只需要添加一個,沒有什麼不妥。考慮一個需要一些驗證的業務對象基類來說出電話號碼或電子郵件地址。您希望確保派生類可以將這些業務規則加載到它們中。如果您沒有基類構造函數,則無法將這些規則添加到派生類對象中。

2

如果對象無法使用或對該類上的每個方法都有依賴關係,這是一種很好的做法。例如,如果你有一個在所有函數中都有相同參數的類,最好在構造函數中設置它,所以函數簽名更小。

+1

目的是將構造函數參數分配給將通過繼承層次繼承的屬性。預計每個派生類都將依賴於這個屬性。至少,我想聲明這個對象存在依賴關係。 – 2010-03-22 15:13:32

2

在第一個例子中,基類的作者正在做什麼,只是確保沒有公開的構造函數被暴露。可能基類在構造函數中不需要特別的東西,但是,如果你不寫任何東西,編譯器會爲你添加默認的(無參數)構造函數。

不是我認爲這是特別有用的。無論如何你都不能實例化一個抽象類。

1

是的,它是一個完全可以接受的設計決定,只有它對於基類來說纔有意義 - 大概是從參數初始化它自己的成員。此外,它還對派生類加以限制:要麼必須傳遞字面值,要麼對其客戶端或其他派生類進行類似的限制。

相關問題