Как уже правильно указали, проблема состоит в том, что вы каждый раз создаете новый экземпляр
ManagerMeeting:
public void Route(string answer)
{
var manager = new ManagerMeeting();
Также оставлю несколько комментариев по поводу кода:
1. Наследование применяете неправильно.
2. Если в сеттерах свойств нет дополнительной проверки на корректность значений полей, то лучше использовать авто-свойства.
3. Слишком сложная структура - классы
Menu,
Route кажутся избыточными. Для таких простых сценариев методы перечисленных классов проще перенести в
Program.
4. Класс
ManagerMeeting слишком сильно связан с консолью, кроме того есть зависимость от
Menu. Если хотите предоставить методы для управления коллекцией (список встреч), то выставите необходимые методы и уже работайте с ними.
5. Для форматированного вывода собственных классов удобно переопределить метод
.ToString()
Немного переписанные классы с учетом указанного выше:
class Meetings // Класс встреч
{
public string DateMeeting { get; set; }
public string StartMeeting { get; set; }
public string EndMeeting { get; set; }
public override string ToString()
{
return $"Дата встречи: {DateMeeting}, Начало встречи: {StartMeeting}, Конец встречи: {EndMeeting}";
}
}
class ManagerMeeting // Класс управление встречами
{
public List<Meetings> MeetingList { get; } = new List<Meetings>();
public void Add(Meetings meet)
{
MeetingList.Add(meet);
}
public string FormatMeetings()
{
StringWriter sw = new StringWriter();
foreach (var meet in MeetingList)
sw.WriteLine(meet);
return sw.ToString();
}
}
меню:
class Program
{
static ManagerMeeting manager = new ManagerMeeting();
public static void ShowMainMenu()
{
Console.WriteLine("Выберите действие: \n1. Показать все встречи\n2. Создать новую встречу");
}
public static bool Handler()
{
Console.Clear();
ShowMainMenu();
string answer = Console.ReadLine();
switch (answer)
{
case "1":
var result = manager.FormatMeetings();
if (string.IsNullOrWhiteSpace(result))
Console.WriteLine("Список пуск");
else
Console.WriteLine(manager.FormatMeetings());
return true;
case "2":
manager.Add(ReadMeeting());
return true;
default:
return false;
}
}
public static void Main(string[] args)
{
while (Handler()) Console.ReadKey(true);
Console.ReadKey(true);
}
public static Meetings ReadMeeting()
{
Console.WriteLine("Введите дату встречи:");
var date = Console.ReadLine();
Console.WriteLine("Введите время начала встречи:");
var startMeeting = Console.ReadLine();
Console.WriteLine("Введите время конца встречи:");
var endMeeting = Console.ReadLine();
Console.WriteLine("Встреча добавлена! \n ");
//Для проверки, записываются ли поля - записываются
Console.WriteLine(date + startMeeting + endMeeting);
return new Meetings
{
DateMeeting = date,
StartMeeting = startMeeting,
EndMeeting = endMeeting
};
}
}
Конечно, код выше тоже далек от идеального (всегда есть что улучшать). Например,:
Предусмотрите проверку данных:
В считывания информации с консоли:
* используйте типы данных которые лучше всего подходят для описания свойств (
DateTime для даты и времени вместо универсального
string)
* напишите вспомогательные методы
GetInteger,
GetDateTime и другие которые будут возвращать результат только после того как пользователь ввел корректные данные.
В классе
ManagerMeeting:
* Пусть вместо
void метод
Add -возвращает
bool в зависимости от успешности добавления (например, чтобы предусмотреть сценарии добавления давно прошедшей встречей).
И так далее.