Делегат не работает. Почему? С#

276
15 сентября 2018, 17:00

Недавно писал приложение про кота! Одно решил другое началось!

program.cs

using CatsFin.CatsFolder;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CatsFin
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Выберите кота или создайте нового\n");
            Console.WriteLine("Для выбора кота нажмите цифру соответствующую коту (1,2,3 и т.д.\n");
            Console.WriteLine("Что бы создать кота введите (+)\n\n");
            Print();
            BaseCats baseCats = new BaseCats();
            // Созданные Коты 
            List<BaseCats> cats = new List<BaseCats>
            {
                new BaseCats("Ману", 5),
                new BaseCats("Марго", 5),
                new BaseCats("Васян", 7)
            };
            BaseCats CreateCat = null;
            while (true)
            {
                try
                {
                    Print();
                    Console.WriteLine($"1 - Ману");
                    Console.WriteLine($"2 - Марго");
                    Console.WriteLine($"3 - Васян");
                    Console.WriteLine("+ - Создать кота");
                    Print();
                    string value = Console.ReadLine();
                    if (value == "+")
                    {
                        Console.WriteLine("Введите имя кота: ");
                        string name = Console.ReadLine();
                        Console.WriteLine("Введите возраст кота: ");
                        int age = Int32.Parse(Console.ReadLine());
                        CreateCat = new BaseCats(name, age);
                        cats.Add(CreateCat);
                    }
                    else
                    {
                        int number = Int32.Parse(value);
                        CreateCat = cats[number - 1];
                        Console.WriteLine();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Возникла ошибка: '{e}'. Попробуйте снова.\n");
                    break;
                }
                Console.WriteLine("Текущий выбранный кот:");
                Print();
                CreateCat.CatsInfo();
                baseCats.Added += (MethodEvent); // Вызов события
                while (CreateCat.Hangry());
            }
        }
        public static void Print()
        {
            Console.Write("-------------------------------------------------\n");
        }

        static void MethodEvent(object sender, EventHendlerArgs e)
        {
            Console.WriteLine(e._mess);
        }
        static void Show(string message)
        {
            Console.WriteLine(message);
        }
    }
}

BaseCat.cs

using CatsFin.FoodCat;
using CatsFin.CatsFolder;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CatsFin.CatsFolder
{
    public delegate void Message(string message);
    class BaseCats : IMount
    {
        protected string _Name { get; set; }
        protected int _Age { get; set; }
        protected int _Hangry { get; set; }
        protected int _Mood { get; set; }
        protected int _Health { get; set; }

        public BaseCats()
        {
        }
        Message message;
        public void MethodMess(Message mess)
        {
            message = mess;
        }
        public BaseCats(string name, int age)
        {
            _Name = name;
            _Age = age;
            _Hangry = 0;
            _Mood = 0;
            _Health = 0;
        }
        public event EventHandler<EventHendlerArgs> Added;
        public bool Hangry()
        {
            Console.WriteLine($"Вы хотите покормить {_Name} (1)");
            Console.WriteLine($"Вы хотите поиграть с {_Name} (2)");
            Console.WriteLine($"Вы хотите вылечить {_Name} (3)");
            Print();
            Console.WriteLine($"Если вы не хотите кормить, играть и лечить кота {_Name} то нажмите (n)");
            Console.WriteLine($"Если вы закончили играться с {_Name} нажмите (q)");
            Print();
            string enter = Console.ReadLine();
            Print();
            bool ok = false;
            switch (enter)
            {
                case "1":
                    if (_Age < 6) { _Hangry += 10; }
                    if (_Age > 5 || _Age < 11) { _Hangry += 5; }
                    if (_Age > 10) { _Hangry += 2; }
                    ok = true;
                    //if (message != null) { message($"Кот ({_Name}) жуёт"); }
                    if (Added != null) { Added.Invoke(this, new EventHendlerArgs($"Кот ({_Name}) жуёт")); }
                    break;
                case "2":
                    if (_Age < 6) { _Mood += 10; }
                    if (_Age > 5 || _Age < 11) { _Mood += 5; }
                    if (_Age > 10) { _Mood += 2; }
                    ok = true;
                    //if (message != null)
                    //{
                    //    if (_Mood <= 0) { message($"Кот ({_Name}) рычит!(Дерёт мебель)"); }
                    //    else { message($"Кот ({_Name}) Мяукает(скачет по шкафам)!"); }
                    //}
                    if (Added != null)
                    {
                        if (_Mood <= 0) { Added.Invoke(this, new EventHendlerArgs($"Кот ({_Name}) рычит!(Дерёт мебель)")); }
                        else { Added.Invoke(this, new EventHendlerArgs($"Кот ({_Name}) Мяукает(скачет по шкафам)!")); }
                    }
                    break;
                case "3":
                    if (_Age < 6) { _Health += 10; }
                    if (_Age > 5 || _Age < 11) { _Health += 5; }
                    if (_Age > 10) { _Health += 2; }
                    ok = true;
                    //if (message != null) { message($"Кот ({_Name}) урчит!"); }
                    if (Added != null) { Added.Invoke(this, new EventHendlerArgs($"Кот ({_Name}) урчит!")); }
                    break;
                case "n":
                    if (_Age < 6) { _Hangry -= 2; _Mood -= 2; _Health -= 2; }
                    if (_Age > 5 || _Age < 11) { _Hangry -= 5; _Mood -= 5; _Health -= 5; }
                    if (_Age > 10) { _Hangry -= 10; _Mood -= 10; _Health -= 10; }
                    ok = true;
                    break;
                case "q":
                    ok = false;
                    break;
                default:
                    break;
            }
            CatsInfo();
            return ok;
        }
        public void CatsInfo()
        {
            Console.WriteLine($"Имя кота - {_Name}");
            Console.WriteLine($"Возраст кота - {_Age}");
            Console.WriteLine($"Уровень сытости - {_Hangry}");
            Console.WriteLine($"Уровень настроения - {_Mood}");
            Console.WriteLine($"Уровень здоровья - {_Health}");
            Print();
            Print();
        }
        public static void Print()
        {
            Console.Write("-------------------------------------------------\n");
        }
    }
}

EventHendlerArgs.cs

namespace CatsFin.CatsFolder
{
    public class EventHendlerArgs
    {
        public string _mess { get; set; }
        public EventHendlerArgs(string message)
        {
            _mess = message;
        }
    }
}

Почему не работает Событие?

Раньше делал похожий пример по уроку всё работало, а тут не в какую! Может глаз за мылился уже. Не могу понять что не так.

Answer 1
Print();
CreateCat.CatsInfo();
CreateCat.Added += (MethodEvent); // not baseCats
while (CreateCat.Hangry());

P.S. Пожалуйста, посмотрите в словаре, как пишутся английские слова. Код очень тяжело читать.

READ ALSO
Иерархия treeView c 3-м уровнем вложенности

Иерархия treeView c 3-м уровнем вложенности

Помогите разобратьсякак корректно построить иерархию для 3 вложенности в treeview, а именно для 3 классов, описывающих таблицы БД (entity framework):

212
RefreshToken в JWT

RefreshToken в JWT

По ответам из этого вопроса я понял как создавать jwt токенНо теперь встал вопрос, как его неявно обновлять

185
Контекст выполнения операции

Контекст выполнения операции

Есть класс Dispatcher с набором public методов, которые вызываются извнеКаждый из методов - задача(Func<Task>), запускаемая в очереди (в один момент...

176