2013-04-17 73 views
0

我目前正在試圖弄清楚如何讓一個包裝類暴露包裝的任何它的屬性,而不必手動設置它們在包裝類中一個接一個。我一直在試圖弄清楚這是否是一個很好的設計選擇,或者如果我完全被誤導了,並且通過這樣做進入一個非常糟糕的地方™。有一個包裝對象暴露其wrapee的屬性

我也已經有了我的包裝類繼承的東西...

如下代碼示例(假的對象,所以不要讀入他們請):

public class Car { 
    public String Name { get; set; } 
    public String Status { get; set; } 
    public String Type { get; set; } 

    public Car(takes params) { 
     // makes car! 
    } 
} 

public class CarWrapper : OtherAutomotiveRelatedThing { 
    public Car car;   

    public CarWrapper(Car c) { 
     car = c; 
    } 
} 

public class OtherAutomotiveRelatedThing { 
    public String Property1 { get; protected set; } 
    public String Property2 { get; protected set; } 
} 

我使用的是繼承包裝對象,因爲我不能修改基礎Car類,它需要其他汽車物件的屬性。其他多個類也繼承自OtherAutomotiveRelatedThing。

我將CarWrapper對象列表返回爲Json(因爲我正在構建Web應用程序)並且包裝對象對我造成了問題。當投射/轉換爲Json時,列表中的CarWrapper對象都包含另一個嵌套對象 - Car對象和我正在​​使用的框架無法獲取其所需的屬性。

有沒有辦法在CarWrapper的「頂級」,露出包裹Car對象的屬性,而無需執行下列操作:

public class CarWrapper : OtherAutomotiveRelatedThing { 
    public Car car; 
    public String Name { get; private set; } 
    public String Status { get; private set; } 
    public String Type { get; private set; } 

    public CarWrapper(Car c) { 
     car = c; 
     this.Name = c.Name; 
     this.Status = c.Status; 
     this.Type = c.Type; 
    } 
} 

請讓我知道如果我沒有說清楚,如果你有任何問題,或需要/想要更多的信息。

謝謝!

+0

你想解決這個問題,爲您的JSON需要,或純粹在C#?前者不是真正的OOP,它運行在與C#不同的平臺上。 – Kelmen

+0

我想在C#中處理這個問題。我和Json一起提出的問題只是一個症狀,隨意忽略這一點。我覺得我現在有一個次優的解決方案,當把它序列化到Json時,這個問題是我看到的第一個問題,如果我沒有解決我的代碼的底層對象模型(這是正確的方式 - 我想確保我已經編寫了我的類,繼承等等......正確的方法嗎?) –

+0

您是否可以使OtherCarRelatedThing繼承自DynamicObject?如果是這樣,我可以提出使用該機制的解決方案。 – Brannon

回答

1

對我來說,它看起來像你想要prototype類似於JavaScript的編程,這不是它們在OOP中使用的。

也許開始認爲它是好的開始:「如果我有兩個不同的汽車包裝(設置不同的屬性),我應該如何通過其中的任何一種方法?」或「我可以有一個包裝汽車和動物的單獨包裝材料」,以及「如何暴露與汽車和動物具有相同名稱但不同含義的公共財產,如skin color?」等

答案可以幫助您確定是否需要說接口,或暴露公共對象,或純封裝,或改變語言說JavaScript的包裝。