2012-02-27 34 views
2

對我來說,這聽起來更像是一個例外,以隱藏基類中的成員以破解某些東西而不是重構糟糕的設計...是否在代碼中隱藏了基類中的成員?

也許我錯了。但...

它是一個代碼味道隱藏在基類中的成員與'新'關鍵字?

+1

我不太明白你的意思。你能給一個代碼示例嗎? – 2012-02-27 09:08:40

+0

我在這裏感到困惑,在基類中創建一個新成員有什麼用處?因爲你不能在基類中有虛擬和新的。只是虛擬的或新的。如果你有新的基類,你永遠不能在派生類中覆蓋它。那麼整個問題的用途是什麼? – Zenwalker 2012-02-27 09:09:32

+0

只要你在Liskov替代原則中工作,這完全沒有問題! – MattDavey 2012-02-27 09:34:33

回答

4

這取決於意圖。例如,如果目的是澄清具體的退貨類型,那麼它可能並不合理。這裏的典型例子是DbConnection。這是有用SqlConnection重申宣佈CreateCommand等,通過返回SqlCommand而不是DbCommand,因爲SqlCommand有許多平臺特有的功能,否則會很痛苦。但關鍵點在於DbConnection方法仍然有效,兩種方法的目的和意義是相同的。

如果你正在做這和方法做不同的事情,或返回不同的東西,則存在這樣的情況,就會引起混淆。而且時間還是有意義的; p如果他們做同樣的事情,並且只是通過正式陳述一些對調用者有用的實現而有所不同,那麼很好。