напсиать код на си шарп с подробным пояснением. Главный класс Car.
Делегат без параметров:
Add к классу поле типа делегат (private).
Add к классу метод, который заполняет поле типа делегат.
Add к классу метод, который запускает делегат, лежащий в поле.
В Program создайте объекты, вызывающие данный метод. В качестве параметра передайте подходящий статический метод из Program (сделайте различные варианты разговора). Use анонимные делегаты и лямбда-выражения.
Создайте групповой делегат.
Сделайте объект, use групповой делегат
Add к классу метод, который сравнивает эти поля в разных объектах.
csharp
public class Car
{
private Action _delegate;
public void AddDelegate(Action action)
{
_delegate = action;
}
public void RunDelegate()
{
_delegate?.Invoke();
}
public void CompareCarFields(Car otherCar)
{
if (otherCar == null)
{
throw new ArgumentNullException(nameof(otherCar));
}
// Сравнение полей объектов
// ...
}
}
Здесь мы создали класс `Car`, в котором есть поле `_delegate` типа `Action`. `Action` является делегатом без параметров. Метод `AddDelegate` принимает делегат типа `Action` и присваивает его значение полю `_delegate`. Метод `RunDelegate` вызывает делегат, который хранится в поле `_delegate`.
Далее, в классе `Program` создадим объекты `Car` и протестируем методы:
csharp
class Program
{
static void Main(string[] args)
{
Car car1 = new Car();
Car car2 = new Car();
// Использование статического метода в качестве параметра
car1.AddDelegate(PrintHello);
// Использование анонимного делегата
car2.AddDelegate(delegate() { Console.WriteLine("Anonymous delegate"); });
// Использование лямбда-выражения
car1.AddDelegate(() => Console.WriteLine("Lambda expression"));
// Запуск делегата
car1.RunDelegate(); // Выводит "Hello"
car2.RunDelegate(); // Выводит "Anonymous delegate"
car1.RunDelegate(); // Выводит "Lambda expression"
// Создание группового делегата
Action groupDelegate = PrintHello;
groupDelegate += PrintGoodbye;
// Использование группового делегата
groupDelegate(); // Выводит "Hello" и "Goodbye"
// Сравнение полей в разных объектах
car1.CompareCarFields(car2);
Console.ReadLine();
}
static void PrintHello()
{
Console.WriteLine("Hello");
}
static void PrintGoodbye()
{
Console.WriteLine("Goodbye");
}
}
В методе `Main` создаются два объекта класса `Car` - `car1` и `car2`. После этого мы добавляем делегаты в поля объектов с помощью метода `AddDelegate`. Для `car1` мы используем статический метод `PrintHello`, для `car2` - анонимный делегат, а для `car1` еще и лямбда-выражение.
Затем мы запускаем делегаты с помощью метода `RunDelegate`. Для `car1` и `car2` выводятся соответственно "Hello" и "Anonymous delegate". После этого мы снова добавляем делегат в `car1` и запускаем его, выводя "Lambda expression".
Далее мы создаем групповой делегат `groupDelegate`, добавляем в него два статических метода `PrintHello` и `PrintGoodbye` и запускаем его. В результате в консоли выводятся "Hello" и "Goodbye".
В конце мы вызываем метод `CompareCarFields` у объекта `car1` и передаем ему в качестве аргумента объект `car2`. Метод выполняет сравнение полей `car1` и `car2` и возвращает результат. В данном примере вместо сравнения полей здесь просто бросается исключение `ArgumentNullException`, если `otherCar` равен `null`. В реальной ситуации нужно будет сравнить поля объектов и выполнить нужные действия в зависимости от результатов сравнения.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет