написать код на си шарп с подробными пояснениеми. класс Car. Задание:
Добавить 2 события – с параметрами и без параметров.
Создать несколько объектов класса и назначить им различные обработчики событий:
• Статический метод любого класса
• Экземплярный метод собственного класса
• Анонимный делегат
• Лямбда-выражение
csharp
using System;
public class Car
{
// Событие без параметров
public event Action OnEngineStarted;
// Событие с параметрами
public event Action<string> OnSpeedChanged;
private string model;
private int speed;
public Car(string model)
{
this.model = model;
}
public void StartEngine()
{
Console.WriteLine("Engine started");
// Вызываем событие без параметров
OnEngineStarted?.Invoke();
}
public void ChangeSpeed(int newSpeed)
{
if (newSpeed != speed)
{
Console.WriteLine($"Speed changed to {newSpeed}");
// Вызываем событие с параметрами
OnSpeedChanged?.Invoke($"Speed changed to {newSpeed}");
speed = newSpeed;
}
}
}
public class Program
{
// Статический метод класса, который будет использоваться в качестве обработчика события
public static void StaticEventHandler()
{
Console.WriteLine("Static event handler");
}
public static void Main()
{
var car1 = new Car("BMW");
var car2 = new Car("Mercedes");
// Назначаем статический метод в качестве обработчика события для car1
car1.OnEngineStarted += StaticEventHandler;
// Назначаем экземплярный метод класса в качестве обработчика события для car1
car1.OnSpeedChanged += car1_SpeedChanged;
// Использование анонимного делегата в качестве обработчика события для car2
car2.OnEngineStarted += delegate ()
{
Console.WriteLine("Anonymous delegate event handler");
};
// Использование лямбда-выражения в качестве обработчика события для car2
car2.OnSpeedChanged += (speed) =>
{
Console.WriteLine($"Lambda expression event handler: {speed}");
};
car1.StartEngine();
car2.StartEngine();
car1.ChangeSpeed(100);
car1.ChangeSpeed(120);
car2.ChangeSpeed(80);
car2.ChangeSpeed(90);
}
// Экземплярный метод класса, который будет использоваться в качестве обработчика события
private static void car1_SpeedChanged(string speed)
{
Console.WriteLine($"Instance method event handler: {speed}");
}
}
В данном примере определен класс `Car`, который имеет два события: `OnEngineStarted` (без параметров) и `OnSpeedChanged` (с одним параметром типа `string`). В классе `Car` присутствуют методы `StartEngine` и `ChangeSpeed`, которые инициируют вызов соответствующих событий.
Код в методе `Main` создает два объекта класса `Car` (`car1` и `car2`) и назначает им различные обработчики событий.
Например, для объекта `car1` назначен статический метод `StaticEventHandler` в качестве обработчика события `OnEngineStarted`.
Для этого же объекта `car1` назначен также экземплярный метод `car1_SpeedChanged` в качестве обработчика события `OnSpeedChanged`.
Для объекта `car2` используется анонимный делегат в качестве обработчика события `OnEngineStarted` и лямбда-выражение в качестве обработчика события `OnSpeedChanged`.
Вызов методов `StartEngine` и `ChangeSpeed` для объектов `car1` и `car2` приводит к вызову соответствующих событий и выполнению назначенных обработчиков событий.
В результате выполнения приведенного кода будет выведено следующее:
Engine started
Static event handler
Engine started
Anonymous delegate event handler
Speed changed to 100
Instance method event handler: Speed changed to 100
Speed changed to 120
Speed changed to 80
Lambda expression event handler: Speed changed to 80
Speed changed to 90
Lambda expression event handler: Speed changed to 90
Обратите внимание на то, что порядок вывода строк может отличаться в зависимости от конкретного запуска кода.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет