Проблема, с которой вы столкнулись, заключается в том, что вы создаете классы без сохранения состояния, что, по сути, не должно быть в этом задании.
Представьте, что я создаю один из ваших кораблей:
var myShip = new Ship();
Хорошо, отлично, так ... что особенного в этом корабле? Я бы ничего не сказал ... корабль не имеет никакой информации, они все одинаковы. Вам нужно найти механизм, который на самом деле хранит информацию внутри вашего корабля, AKA state :
public class Ship
{
//these should be properties or
//readonly variables but thats for later
public string name;
public string date;
}
Хорошо, теперь вы можете создать Ship
и придать ему некоторое состояние:
var myShip = new Ship();
myShip.name = "My Ship";
myShip.date = "Yesterday";
Отлично! Теперь у нас do есть интересный корабль в наших руках; у него есть имя и дата .
Более того, теперь виртуальному методу Print
не нужна никакая информация, передаваемая ему (аргументы), потому что он может получить состояние с корабля, из которого вызывается метод:
public class Ship
{
....
public virtual string Print() {
Console.WriteLine("The ship's name: {0}", name);
Console.WriteLine("The ship's build date: {0}", date); }
Вы видите, как это работает?
Отсюда вы сможете понять, как создать подкласс CruiseShip
, переопределить Print
и заставить его делать то, что вы хотите.
Предметы, о которых вы обязательно захотите прочитать:
- Конструкторы и исходное состояние
- Почему свойства вместо открытых полей
- Только для чтения элементы полей и свойства и неизменяемые типы