0

Допустим, у меня есть класс, в котором пользователь может ввести значение

class DogStats
{
    static public void Stats(string[] args)
    {
        Console.Write("Write your dog's weight(in kg): \n");
        double weight = Convert.ToDouble(Console.ReadLine());
    }
}

Каким образом мне получить это значение в другом классе? К примеру, в такой конструкции:

class DogEat
{
    static public void DogEating()
    {
    Console.WriteLine("Do you want to feed your dog 3 times?");
    string choose = Console.ReadLine();
    switch (choose)
    {
        case "Y": //**!HERE!**

    }
}

}

Andrew
  • 11
  • 4

1 Answers1

0

У Вас в коде используются статические методы. Это удобно, с точки зрения того, что не нужно создавать экземпляр класса при вызове такого метода - но тогда логично было бы использовать вообще статические классы.

В остальном - использование статических методов (и классов) считается не совсем хорошей практикой, по ряду причин, из которых мне кажутся важными две: статические классы не очень хорошо подходят для тестирования, и вообще подвержены сайд-эффектам и 2) они не могут имплементировать интерфейсы.

Но на самом деле у вас есть другая проблема: у Вас метод класс DogStats запрашивает у пользователя некий ввод, но не сохраняет введенное значение.

Обычно для таких вещей в классах создают поля. То есть, есть поле - "хранитель данных", есть метод - "код, который данные спросит у пользователя".

Поля могут быть приватными, могут быть - и это очень здорово - объявлены как {get; private set;} - это даёт возможность внутри класса работать с этим полем, а "снаружи" - только читать его.

С этими замечаниями задача становится решаемой, путём совсем небольшой модификации кода:

   class Program {
        static void Main(string[] args) {
        DogEat.DogEating();

        Console.ReadKey();
    }
}

class DogStats {

    public static double Weight { get; private set; }
    public static void Stats() {
        Console.Write("Write your dog's weight(in kg): \n");
        Weight = Convert.ToDouble(Console.ReadLine());
    }
}

class DogEat {
    public static void DogEating() {


        Console.WriteLine("Do you want to feed your dog 3 times?");
        string choose = Console.ReadLine();
        switch (choose) {
            case "Y": 
                DogStats.Stats();
                break;
            case "N":
                break;
        }

        Console.WriteLine($"Your dog's weight: {DogStats.Weight}");
    }
}

Вывод программы тогда будет примерно слеующим:

    Do you want to feed your dog 3 times?
    Y
    Write your dog's weight(in kg):
    20
    Your dog's weight: 20

Если у Вас есть вопросы - пишите в комментариях, а вообще из серьезного чтива по C# я бы посоветовал книжку автора Албахари ("Справочник. Полное описание языка") - по этой фамилии она легко гуглится, и перевод одного из изданий, не слишком устаревшего, есть на русском.

Успехов Вам!

S.H.
  • 11,065
  • 1
  • 24
  • 46
  • Здесь можно было просто вызвать метод с аргументом. И выкинуть статику. – aepot Jan 16 '21 at 22:07