對於在.NET中涉及嵌套類型的某些場景,我很好奇什麼是好的做法。公開的嵌套類型
假設你有一個Wheel類,並且Wheel類包含Bearing對象。軸承對象只在輪子內有意義,並且不希望獨立創建它,所以將軸承類嵌套在輪子對象內是有意義的。但是,可以說你有一個場景,你現在需要閱讀Wheel類以外的Wheel.Bearings屬性。這現在需要公開嵌套的軸承類。
在這種情況下,最好的選擇是什麼?
1 - 創建嵌套在輪類
2內的公共軸承類 - 創建獨立的軸承類,這需要輪對象在其構造
3 - 創建輪命名空間和創建該命名空間裏的獨立軸承類。
4 - 其他?
更新: 我正在更新此更多的細節,並反映了迄今爲止的一些建議。 ClassParent是父類,ClassChild是子類。 ClassChild始終是ClassParent的孩子,它獨立存在是沒有意義的。問題是ClassChild有幾個屬性需要公開顯示,而其餘的只能從ClassParent調用。一個示例是一個ClassChild.Delete函數,它不應該公開顯示,因爲它只能從ClassParent調用,因爲ClassParent需要執行適當的清理和修改。
在回顧了這些建議後,我提出的設計看起來有點不潔,所以我想我會要求輸入。我有:
public class Parent
{
ChildNested childObj
public DeleteChild()
{
//expose this method publically
childObj.DeleteChild()
//other functionality
}
public Child GetChild()
{
//expose Child, not ChildNested publically
return childObj
}
private class ChildNested:Child
{
public Child()
{
Base.Child()
}
public DeleteChild()
{
Base.Delete()
}
}
public abstract class Child
{
protected Child()
{
}
protected Delete()
{
}
public PublicPropertyToExpose()
{
}
}
+1。我完全同意。嵌套類型很難閱讀,很難遵循。當你對他們編程時,你總是需要指定輸出類型,這很煩人。 – Steven 2010-03-10 17:16:10
但是如果情況是,軸承永遠也不應該存在沒有輪子存在?因爲在這種情況下,您實際上可以創建一個沒有車輪的軸承對象。一個例子是一個Keyboard類和一個Key類,如果沒有鍵盤,你永遠不會擁有一個keybody鍵。 – 2010-03-10 17:24:16
有什麼辦法可以創建一個具有兩個(或更多)公共類的派生類,但不是「公開」派生的,除非公開基類,具有私有構造函數,然後派生類嵌套在它內?在設計階級層次結構時,我經常會發現自己陷入了一個角落,我想成爲公共類的東西被卡在其他類中。除了提供比我真正想要的更大的範圍之外,還有什麼好方法呢? – supercat 2010-12-06 19:53:40