Привет! Меня зовут Алексей и сегодня я хочу рассказать тебе о классе InputReader на языке программирования C#. В этом классе мы создадим два события ー одно типа Action и другое типа Func.
Для начала, создадим класс InputReader⁚
csharp
public class InputReader
{
public delegate void ActionEventHandler(string key);
public delegate void FuncEventHandler;
public event ActionEventHandler ActionEvent;
public event FuncEventHandler FuncEvent;
public void ReadInput
{
while (true)
{
ConsoleKeyInfo keyInfo Console.ReadKey;
if (keyInfo;Key ConsoleKey.Spacebar)
{
FuncEvent?.Invoke;
}
else if (keyInfo.KeyChar > ‘0’ nn keyInfo.KeyChar < '9')
{
ActionEvent?.Invoke(keyInfo.KeyChar.ToString);
}
}
}
}
В этом классе мы объявляем два делегата⁚ ActionEventHandler, который принимает строковый аргумент, и FuncEventHandler, который не принимает аргументов. Затем объявляем два события⁚ ActionEvent и FuncEvent.Метод ReadInput будет выполняться в бесконечном цикле и будет считывать ввод пользователя. Если пользователь нажал клавишу пробел, то вызывается событие FuncEvent. Если пользователь ввел число, то вызывается событие ActionEvent с аргументом в виде строки с введенным числом.Теперь давай создадим второй класс, который будет подписываться на эти события и реагировать на них⁚
csharp
public class EventSubscriber
{
public EventSubscriber(InputReader inputReader)
{
inputReader.ActionEvent OnActionEvent;
inputReader.FuncEvent OnFuncEvent;
}
private void OnActionEvent(string key)
{
Console.WriteLine($″Пользователь нажал клавишу⁚ {key}″);
}
private void OnFuncEvent
{
Console.Clear;
Console.BackgroundColor ConsoleColor.Red;
Console.ForegroundColor ConsoleColor.White;
}
}
В конструкторе класса EventSubscriber мы подписываемся на события ActionEvent и FuncEvent класса InputReader. При вызове события ActionEvent вызывается метод OnActionEvent, который будет выводить в консоли фразу ″Пользователь нажал клавишу⁚ {клавиша}″. При вызове события FuncEvent вызывается метод OnFuncEvent, который будет менять цвет консоли на белый на красный фон и очищать ее.Теперь, чтобы проверить работу этих классов, создадим объекты и запустим метод ReadInput⁚
csharp
public class Program
{
static void Main(string[] args)
{
InputReader inputReader new InputReader;
EventSubscriber eventSubscriber new EventSubscriber(inputReader);
inputReader.ReadInput;
}
}
Теперь, каждый раз когда пользователь нажимает клавишу пробел, цвет консоли меняется на белый на красный фон и консоль очищается. А когда пользователь вводит число, выводится сообщение ″Пользователь нажал клавишу⁚ {клавиша}″.
Надеюсь, эта статья поможет тебе лучше понять, как использовать события и делегаты в C# при создании классов. Удачи в программировании!