让包装器对象暴露其wrapee的属性

时间:2013-04-17 02:43:27

标签: c# oop inheritance wrapper

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

我的包装类也已经继承了......

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

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对象和我使用的框架无法获取其所需的属性。

有没有办法在"顶级"中公开包装的Car对象的属性?没有执行以下操作的CarWrapper:

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

对我而言,您似乎想要prototype - 样式编程,就像在JavaScript中一样,这不是他们在OOP中使用的。

也许将它想象为“如果我有两个不同的汽车包装(设置了不同的属性)是一个好的开始,我应该如何传递任何方法?”或者“我可以拥有一个包装汽车和动物的包装纸”,以及“如何揭示汽车和动物具有相同名称但含义不同的公共财产,如skin color”。等

答案可以帮助您确定是否需要说明接口,或公开对象公开的包装器,或纯粹的封装,或更改语言来表示JavaScript。