0

我目前正在尝试弄清楚如何让包装类公开它所包装的任何内容的属性,而不必在包装类中手动设置它们。我一直试图弄清楚这是否是一个好的设计选择,或者我是否完全被误导并通过这样做进入一个非常糟糕的地方™。

我也已经让我的包装类继承了一些东西......

下面的示例代码(假对象,请不要读入它们):

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;
    }
}

如果我不清楚,如果您有任何问题或需要/想要更多信息,请告诉我。

谢谢!

4

1 回答 1

1

对我来说,看起来你想要prototype像 JavaScript 那样的风格编程,这不是他们在 OOP 中使用的。

也许将其视为“如果我有两个不同的汽车包装器(具有不同的属性集),我应该如何向其中任何一个传递方法?”是一个很好的开始。或“我可以有一个包装汽车和动物的包装器”,以及“如何公开汽车和动物同名但含义不同的公共财产,比如skin color?” ETC

答案可以帮助您确定是否需要说接口,或暴露公共对象的包装器,或纯封装,或将语言更改为说 JavaScript。

于 2013-04-17T09:49:13.757 回答