Привет! Меня зовут Максим, и сегодня я хочу поделиться с вами своим опытом использования языка C# для создания класса InputReader с двумя событиями⁚ одно типа Action, другое Func. Для начала, нам понадобится создать класс InputReader. Я начну с определения двух событий внутри класса⁚ одно событие типа Action, другое ⎯ типа Func. Событие типа Action будет использоваться, когда пользователь вводит число, а событие типа Func ー когда пользователь нажимает клавишу пробел. Далее, я создам бесконечный цикл внутри класса InputReader, чтобы постоянно считывать ввод пользователя. Используя метод Console.ReadKey, я буду получать ввод от пользователя и проверять, является ли он числом или клавишей пробел. Если ввод ー число, я вызову событие типа Action, а если ввод ⎯ клавиша пробел, я вызову событие типа Func. При вызове события типа Action, я выведу сообщение в консоль вида ″Пользователь нажал клавишу⁚ {клавиша}″. А при вызове события типа Func, я буду менять цвет консоли и очищать ее. Теперь давайте создадим второй класс, который будет подписываться на эти события. Я назову его EventHandler. Внутри этого класса я добавлю два метода⁚ один для обработки события типа Action, другой ー для обработки события типа Func.
В методе для обработки события типа Action, я просто буду выводить сообщение в консоль, помимо этого, я с помощью метода Console.ForegroundColor буду менять цвет консоли на случайный. А в методе для обработки события типа Func, я буду использовать метод Console.Clear для очистки консоли.Теперь все готово для того, чтобы создать экземпляры классов InputReader и EventHandler и подключить их друг к другу.Вот так будет выглядеть код класса InputReader⁚
using System;
class InputReader
{
public event Action
public event Func
public void ReadInput
{
while (true)
{
var key Console.ReadKey(true);
if (int.TryParse(key.KeyChar.ToString, out int number))
{
NumberPressed?.Invoke(number);
}
else if (key.Key ConsoleKey.Spacebar)
{
int result SpacePressed?.Invoke ?? 0;
if (result 1)
{
Console.BackgroundColor ConsoleColor.Black;
Console.Clear;
}
}
}
}
}
А вот код класса EventHandler⁚
using System;
class EventHandler
{
public EventHandler(InputReader inputReader)
{
inputReader.NumberPressed OnNumberPressed;
inputReader.SpacePressed OnSpacePressed;
}
private void OnNumberPressed(int number)
{
Console.WriteLine($″Пользователь нажал клавишу⁚ {number}″);
}
private int OnSpacePressed
{
Console.BackgroundColor ConsoleColor.Red;
Console.Clear;
return 1;
}
}
Наконец, создадим экземпляры классов InputReader и EventHandler и вызовем метод ReadInput у экземпляра InputReader⁚
class Program
{
static void Main
{
InputReader inputReader new InputReader;
EventHandler eventHandler new EventHandler(inputReader);
inputReader.ReadInput;
}
}
Теперь, когда я запускаю программу, я могу нажимать клавиши и видеть результаты⁚ если я нажимаю числовые клавиши, в консоль выводится сообщение ″Пользователь нажал клавишу⁚ {клавиша}″. Если я нажимаю клавишу пробел, цвет консоли меняется на красный и консоль очищаеться.
Я надеюсь, что мой опыт создания класса InputReader с двумя событиями окажется полезным для вас! Приятного кодинга!