public class Car
{
private string make;
private string model;
public Car(string make, string model)
{
this.make = make;
this.model = model;
}
public virtual void Display()
{
Console.WriteLine("Make: {0}", make);
Console.WriteLine("Model: {0}", model);
}
public string Make
{
get{return make;}
set{make = value;}
}
public string Model
{
get{return model;}
set{model = value;}
}
}
public class SuperCar:Car
{
private Car car;
private int horsePower;
public SuperCar(Car car)
{
this.car = car;
}
public int HorsePower
{
get{return horsePower;}
set{horsepower = value;}
}
public override void Display()
{
base.Display();
Console.WriteLine("I am a super car");
}
Когда я сделать что-то вродеСоздать унаследованный класс от базового класса
Car myCar = new Car("Porsche", "911");
SuperCar mySupcar = new SuperCar(myCar);
mySupcar.Display();
Я только получить «Я суперкар», но не свойство моего базового класса. Должен ли я явно назначать свойства моего базового класса в конструкторе SuperCar? На самом деле я пытаюсь создать шаблон Decorator, где я хочу, чтобы класс добавлял поведение в базовый класс.
для суперкара быть истинный декоратор, делегат все о f Методы автомобиля для вашего завернутого автомобиля. Это сомнительно, если Decorator - правильный шаблон здесь, тем более, что вы имеете дело с конкретными классами. – mdma
Предположим, вы переименовываете автомобиль в контейнер и суперкар в коробку. Вы говорите: «Коробка - это своего рода контейнер (поскольку он наследуется от контейнера), и каждый ящик содержит контейнер (потому что он принимает контейнер в своем конструкторе и сохраняет его в поле)». Это на самом деле то, что вы хотите моделировать? Почему коробка должна содержать контейнер? Почему SuperCar содержит автомобиль и быть своего рода автомобилем? –