0

Задание такое, используя списки List написать программу "Записная книжка", и я не уверен в качестве своего кода, и не могу обойти проблему с использованием не статических методов. Как мне запустить метод Menu в Main? (код не дописан, так как мне помешала эта проблема, я пытался обойти с помощью класса, но как видно в коде, это тоже не вышло)

class Program
{
    public class RecordingData
    {
        public string Data;
        public List<Recording> listRecording = new List<Recording>();
        public RecordingData(string data, int n1, string rt1, string t1, string d1)
        {
            Data = data;
            listRecording.Add(new Recording(n1, rt1, t1, d1));
        }
    }
public class Recording
{
    public int Number;
    public string RecordType;
    public string Time;
    public string Description;

    public Recording(int n, string rt, string t, string d)
    {

        Number = n;
        RecordType = rt;
        Time = t;
        Description = d;
    }
}

public List&lt;RecordingData&gt; notebook = new List&lt;RecordingData&gt;();

public void AddRecording()
{
    notebook.Add(new RecordingData(&quot;gdsg&quot;, 1, &quot;214eefs&quot;, &quot;24ewf&quot;, &quot;fdfgdf&quot;));
    Console.Write(notebook[0]);
}

public void Menu()
{
    int Variant = 0;

    while (Variant != 5)
    {
        Console.Write($&quot;МЕНЮ \n1. Поиск \n2. Добавить\n3. Изменить \n4. Удалить\n5. Завершить работу \nВведите цифру, соответсвующую необходимому пункту меню: &quot;);

        Variant = Convert.ToInt32(Console.ReadLine());
        if (Variant == 1)
        {

        }
        else
            if (Variant == 2)
        {
            AddRecording();
        }
        else
            if (Variant == 3)
        {

        }
        else
            if (Variant == 4)
        {

        }
    }
}

public class ClassMenu
{
    public  void StartMenu ()
    {
        Menu();
    }
}

static void Main(string[] args)
{
    ClassMenu start = new ClassMenu();
    start.StartMenu();
}

}

aepot
  • 49,560

2 Answers2

2

Чтобы вызвать метод объекта, надо создать этот объект.

static void Main(string[] args)
{
    Program program = new Program();
    program.Menu();
}

Еще, у вас есть недочет, который может помешать в будущем, вы описываете новые классы внутри класса Program, не делайте так, описывайте снаружи, рядом с классом, а не внутри него. На их доступность это никак не повлияет.

aepot
  • 49,560
  • Так у меня так и сделано, но не работает – Николай Синев Mar 25 '21 at 17:11
  • @НиколайСинев насколько я вижу, у вас сделано по-другому. Я не вижу у вас ни одного вызова конструктора new Program(). – aepot Mar 25 '21 at 17:13
  • static void Main(string[] args) { ClassMenu start = new ClassMenu(); start.StartMenu(); } Может я что то не понимаю? – Николай Синев Mar 25 '21 at 17:15
  • @НиколайСинев а если внимательнее посмотреть, то можно увидеть, что между ClassMenu и Program таки есть разница. – aepot Mar 25 '21 at 17:17
  • АААААААААААААААААААААААААААА меня только осенило, сейчас попробую – Николай Синев Mar 25 '21 at 17:19
  • @НиколайСинев берете метод Main из ответа, копируете себе в код вместо своего, оно начинает работать, ставите моему ответу галочку, и дело с концом. – aepot Mar 25 '21 at 17:20
  • 1
    Работает, пока что как минимум, спасибо, ты лучший)) Только можешь по подробнее объяснить, как и почему? А ещё спасибо за совет про написание класса до класса программ ) – Николай Синев Mar 25 '21 at 17:20
  • 1
    @НиколайСинев как и почему? - потому что ООП. Чтобы включить чайник, надо его создать. Класс - это чертеж чайника, а не сам чайник. А вы чтобы включить чайник создали чашку, дергаете ее за ручку, чайник не включается. Как-то так. – aepot Mar 25 '21 at 17:22
  • Чуть не уссался от метафоры на чайник) хахахахах – Николай Синев Mar 25 '21 at 17:25
-1

Если коротко, то никак.

ClassMenu является дочерним и не знает, какие методы есть у родителя.

  • А как это исправить? – Николай Синев Mar 25 '21 at 17:12
  • Относись к классу Program как объекту самого высокого уровня. Сделай новый класс-обертку вокруг твоих классов и в нем пиши те методы, которые тебе нужны. Класс-обертка должен принимать решение о показе, а не меню. – Игорь Mar 25 '21 at 17:14
  • Да хоть как можно к этому объекту относиться можно, но если не создать экземпляр, невозможно будет вызвать ни одного нестатичного метода. – aepot Mar 25 '21 at 17:15
  • А поподробнее для тупеньких – Николай Синев Mar 25 '21 at 17:15
  • Просто перенеси всю реализацию в ClassMenu – Игорь Mar 25 '21 at 17:19