回答
所以這聽起來像你問以下。你有
class Parent {
public SomeType ParentProperty { get; set; }
}
class Child : Parent { }
,你要隱藏SomeProperty
從在Child
實例可見。
不要這樣做!不要隱藏基類中可見的屬性。首先,它很容易得到解決:
Parent p = new Child();
p.ParentProperty; // oops!
其次,它是一個巨大的違反Liskov substitution principle的。基本上,該原則指出,關於Parent
的所有實例,您知道的任何事情對於Child
的所有實例都應該是真實的。在這裏,我們知道Parent
的所有實例都有一個名爲ParentProperty
的可見屬性,其類型爲SomeType
。因此,Child
的所有情況都應該(道德應該)成立。
你能告訴我們爲什麼你想這樣做,也許我們可以建議一個替代方案?
如果你在派生類的時候說你的孩子類,那麼幸運的是沒有辦法讓它走。爲什麼這將是不好的故事看看這段代碼:
base myObj = objectFactory.Create(); myObj.theMethodHiddenAway();
工廠可以返回任何基類型對象,包括從基類派生的所有類。編譯器需要決定什麼版本的MethodHiddenAway來調用編譯時間(重載解析),並且因爲它沒有具體類型的編譯時間,如果可以通過繼承使方法消失,編譯器不會知道MethodHiddenAway是否甚至存在。
我建議你看看你的設計,因爲你所要求的氣味就像是兩個設計缺陷之一。要麼這個方法不在那裏,要麼你派生類不應該繼承基類
你不能。子類引用將始終隱式轉換爲父類引用,因此無法阻止在不從父類中刪除該屬性的情況下使用該屬性。
不要。
如果你需要這個,你有一個設計問題。 Liskov Substitution Principle告訴您,您的Child
類應該可以替代Parent
類。這意味着所有使用Parent
類的代碼都應該可以使用您的Child
類。如果你想刪除一個屬性,情況並非如此。無論使用哪個特定屬性,您都無法使用子項替換父項。
我想明顯的問題/答案是,也許你應該讓財產私人。 (當然,除非你有源沒有訪問先跟)
希望這幫助,您可以陰影屬性和只讀設置吧:)
- 1. 隱藏對子類中父項屬性的訪問
- 2. 隱藏父類div的子類
- 3. 隱藏基類的屬性
- 4. 如何隱藏子窗體中的基類屬性在C#
- 5. 隱藏屬性/類名
- 6. 合併父類和子類的屬性
- 7. 如何在父類的屬性中存儲子類?
- 8. 在結果中隱藏類屬性json
- 9. 訪問子類中的父屬性值
- 10. 如何查找派生類型隱藏其屬性的基類屬性
- 11. Swift:子類返回父類屬性
- 12. FactoryGirl重寫父類屬性子類
- 13. 爲什麼父類的靜態方法隱藏在子類中?
- 14. 隱藏類/接口的繼承屬性?
- 15. 如何通過子類屬性來完成父類的列表?
- 16. 如何基於子類的屬性對父類進行排序?
- 17. 如何隱藏C#中的基類屬性?
- 18. 如何在序列化過程中隱藏類的屬性?
- 19. 如何從子類中隱藏DependencyPropery?
- 20. C#子類中的受保護屬性應該隱藏對父級公共屬性的訪問權嗎?
- 21. 類,隱藏屬性和繼承
- 22. 的Javascript實例子類與父屬性
- 23. 訪問從父在子類的屬性
- 24. 繼承和隱藏父母的屬性
- 25. 父類的列表中的數據綁定ListView子類屬性
- 26. 如何從父類繼承的子類PHP類將值添加到父類數組屬性中?
- 27. 如何更改父類的屬性
- 28. 覆蓋/隱藏另一個屬性內部的類屬性
- 29. PHP:是來自子類或父類的類屬性/常量值
- 30. 通過父類中的函數訪問子類屬性
你問大約三個完全不同的語言 - 這是一個你真的在用嗎? – 2010-01-29 14:04:59
剛剛看了一下標籤(我首先假定你指的是成員),但C++(和我認爲Java)沒有屬性。 – Yacoby 2010-01-29 14:05:33
@Yacoby:是的,Java也沒有。 – jason 2010-01-29 14:11:27