Member 13733578 Ответов: 1

Привлеченный к классу/методу


У меня есть этот метод в моем классе Calroies, который наследует класс User.

class Calories : User
    {
        public void CalcuateCaloriesMale()
        {
            var user = new User();
            var equation = (10 * user.Weight) + (6.25 * user.Height) - (5 * user.Age) + 5;
            Console.WriteLine("Based on the Mifflin – St Jeor Formula You need to eat {0} Kalories a day\nTo Gain Weight ", equation);

        }
    }


И у меня есть этот код в Program.cs


if (newGoal.GoalStatusGainWeight ==  true)
    {
        var calories = new Calories();
        switch (newUser.Gender)
        {
            case "m":
                calories.CalcuateCaloriesMale();
                break;



Теперь я не понимаю, как заставить класс калорий знать, что пользователь ввел в начале начала.


newUser.Name = Question.AskString("Name: ");
    newUser.Age = Question.AskInt("Age: ");
    newUser.Gender = Question.AskString("Gender(m/f): ");
    newUser.Height = Question.AskInt("Height(cm): ");
    newUser.Weight = Question.AskInt("Weight(kg): ");



Класс калорий не учитывает то, что ввел пользователь.
Я думал, что могу просто сделать нового пользователя, но, наверное, мое мышление было неправильным.
Что я делаю не так? Как я могу представить себе, что это работает, чтобы я мог узнать это лучше?

Что я уже пробовал:

Я не понимаю, как сделать так, чтобы код знал, что пользователь ввел initally

1 Ответов

Рейтинг:
8

Thomas Daniels

Убедитесь в том, что Calories класс получает newUser, например, в качестве аргумента для CalculateCaloriesMale:

        public void CalcuateCaloriesMale(User user) // add "user" parameter
        {
            // now you don't need this line: var user = new User();
            var equation = (10 * user.Weight) + (6.25 * user.Height) - (5 * user.Age) + 5;
            Console.WriteLine("Based on the Mifflin – St Jeor Formula You need to eat {0} Kalories a day\nTo Gain Weight ", equation);

        }

...

if (newGoal.GoalStatusGainWeight ==  true)
    {
        var calories = new Calories();
        switch (newUser.Gender)
        {
            case "m":
                calories.CalcuateCaloriesMale(newUser); // Pass newUser to the method
                break;
Кроме того, вы можете создать конструктор[^] для Calories и возьмите с собой User там и храните его, а затем используйте в беспараметрическом режиме CalculateCaloriesMale класс.

Боковое примечание: это вряд ли имеет смысл делать Calories унаследовать от User. Разработчику-человеку может показаться, что калории-это определенный тип пользователя, что, конечно же, не так. И не похоже, что от него есть какая-то польза.


Member 13733578

Привет, Транк тебе очень нравится. Ваше решение работает, и я полностью согласен с частью наследования.
Что мне больше интересно, так это необходимый класс конструктора или я могу просто работать в этом классе, так как мне нужно сделать его и для женщин.

Спасибо

Thomas Daniels

Вам не нужно брать пользователя в конструктор, если вы этого не хотите; вы лучше меня знаете, какие дальнейшие цели у вас есть, поэтому вы должны решить. Я просто хотел упомянуть об этом, на случай, если вы почувствуете, что это будет лучше для вашего заявления.

Member 13733578

Ну ладно, спасибо :)