Как правило, вы не хотите вкладывать определения классов так, как вы это делали. Что если бы у вас была машина, которая могла бы использовать другой тип двигателя? Как, скажем, 4-литровый против 2-литровый? Или нормально надутый против турбо заряженного? Вместо этого вам может потребоваться передать Engine
в качестве параметра Car
.
. Что касается вашей реальной проблемы получения значений из этих объектов, вам также необходимо определить, как можно получить значенияи / или изменилось. Конструктор выполняет первоначальную работу, но что, если Engine
или Car
имеют значения, которые необходимо изменить или получить во время жизни программы? Вам нужны средства доступа.
public class Car
{
public string name { get; private set; }
public string model { get; private set; }
public Engine engine { get; private set; }
public Car(string name, string model, Engine engine)
{
this.name = name;
this.model = model;
this.engine = engine;
}
}
class Engine
{
public string number { get; private set; }
// other values as necessary
public Engine(string number)
{
this.number = number;
}
}
var newCar = new Car('Volvo', 'Hatchback', new Engine('someNumber'));
var engineNumber = newCar.engine.number;
В этом примере вы можете получить нужные данные, ссылаясь на свойство объекта (get
), но вы не сможете изменить эти данные таким же образом. (private set
). Вместо этого вам нужно создать объектные методы (читай: функции, если вы новичок в ООП), чтобы явно изменить эти значения.