Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 02.06.2020
Сообщений: 28

Делегаты Func, Action

25.12.2020, 17:36. Показов 1282. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, необходимо переделать код с использованием делегатов Func и Action. А я никак не пойму для чего они вообще нужны, помогите с кодом и объясните что это и чем это кушать.

Вот ТЗ:

Написать класс блендера.

Основные свойства: марка, дата производства, текущая и максимальная скорость.

Должен быть реализован метод изменения текущий скорости в большую или меньшую сторону.

Создать делегат, вызываемый при: увеличении скорости, уменьшении скорости, при поломки блендера (текущая скорость превысила максимальную).

Реализовать соответствующие события.

Вот код:


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
 
namespace Laba8
{
    class Program
    {
        delegate void BlenderStateHandler(string message);
       
        class Blender
        {
 
            public string Mark = "Tefal";
            public string Date = "24.09.2001";
            public int CurrSpeed = 60;
            public int MaxSpeed = 2000;
 
            
            public event BlenderStateHandler Break;// сломаешь будешь платить
            public event BlenderStateHandler UpSpeed;// поднять скорость
            public event BlenderStateHandler DownSpeed;// опустить скорость
            public event BlenderStateHandler lessthan0;// меньше 0
            public event BlenderStateHandler dw0speed; // положили 0 в скорость
 
 
            public void ReduseOrAddSpeed(int ReOrAdSP)// метод для добавление или убавления скорости
            {
                if (ReOrAdSP > 0)
                {
                    if (ReOrAdSP + CurrSpeed > MaxSpeed)// поломка блендера
                    {
                        Break($"Ты хочешь сломать блендер?! У него максимум {MaxSpeed} об/мин!");
                    }
 
                    CurrSpeed += ReOrAdSP;// увеличение скорости оборотов
                    UpSpeed($"Скорость увеличилась на {ReOrAdSP} об/мин, теперь она составляет {CurrSpeed} об/мин");
 
                }
                if (CurrSpeed > 0)
                {
                    if (ReOrAdSP < 0)
                    {
                        CurrSpeed += ReOrAdSP;
 
                        if (CurrSpeed < 0)
                        {
                            lessthan0("Скорость не может быть меньше 0 об/мин !");// если вдруг скорость получается меньше 0
                        }
                        else
                        {
                            DownSpeed($"Скорость уменьшилась на {-ReOrAdSP} об/мин, теперь она составляет {CurrSpeed} об/мин");// уменьшение скорости оборотов
                        }
                    }
                }
 
                if (ReOrAdSP == 0)
                {
                    CurrSpeed = CurrSpeed + 0;
                    dw0speed($"Скорость не изменилась как была {CurrSpeed} об/мин, так и осталась {CurrSpeed} об/мин");
                }
 
 
 
            }
 
        }
 
        static void Display(string message)
        {
            Console.WriteLine(message);
        }
 
        static void Main()
        {
            Blender Blend = new Blender();
 
            Console.WriteLine("Если хотите увеличить скорость введите 1, если уменьшить введите 2");
            int choise = int.Parse(Console.ReadLine());
 
            // Блок обработчиков событий
            Blend.Break += new BlenderStateHandler(Display);
            Blend.UpSpeed += new BlenderStateHandler(Display);
            Blend.DownSpeed += new BlenderStateHandler(Display);
            Blend.lessthan0 += new BlenderStateHandler(Display);
            Blend.dw0speed += new BlenderStateHandler(Display);
 
            switch (choise)
            {
                case 1:
                    Console.WriteLine("Введите на сколько вы хотите увеличить скорость вращения");
                    try
                    {
                        int AddSP = int.Parse(Console.ReadLine());
                        if (AddSP > 0)
                        {
                            Blend.ReduseOrAddSpeed(AddSP);
                        }
                    }
                    catch
                    {
                        Console.WriteLine("Ошибка ввода! Введите число");
                    }
 
                    break;
 
 
                case 2:
                    Console.WriteLine("Введите на сколько вы хотите уменьшить скорость вращения");
                    try
                    {
                        int ReSP = int.Parse(Console.ReadLine());
                        Blend.ReduseOrAddSpeed(-ReSP);
                    }
                    catch
                    {
                        Console.WriteLine("Ошибка ввода! Введите число");
                    }
 
                    break;
 
 
                default:
                    Console.WriteLine("Такой кнопки нет в управлении");
                    break;
            }
            Console.ReadKey();
 
        }
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2020, 17:36
Ответы с готовыми решениями:

Делегаты Func и Action, а так же их параметры
С самописными делегатами разобрался Но зачем нужны Func и Action? Это заранее подготовленные делегаты что бы не приходилось...

Func<>, Action<> + ref, out
Правильно ли я понимаю, что с Func и Action невозможно использовать ref? Например это банально не скомпилируется. void f(ref int a) ...

Func / Action с параметром ref
почему у меня не получается объявить Action&lt;ref object&gt;?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2020, 17:36
Помогаю со студенческими работами здесь

Делегат Func<Action<char>, bool, double, double>
Задание: реализуйте пользовательский тип делегата требуемой сигнатуры и выполните с его использованием вызов нескольких методов (с...

Func<TIn, bool> в Func<TOut, bool>
Подскажите если возможность как-нибудь преобразовать Func&lt;TIn, bool&gt; в Func&lt;TOut, bool&gt;? Есть автомаппер, типы TIn и TOut, автомаппятся,...

Как расширить ссылку из Controller/Action/Id до Contr/Action/Category/Id ?
Здравствуйте, Дорогие форумчане! Давно не брался за ASP, поэтому задаю несколько глупый и для кого-то очень простой вопрос: как...

Ошибка каскадных таблиц (Specify ON DELETE NO ACTION or ON UPDATE NO ACTION)
Здравствуйте. Возникла проблема с созданием таблицы. Ошибка в Package Manager Console public class...

Куда я должен вставить ON DELETE NO ACTION or ON UPDATE NO ACTION?
Сделал миграцию, бд не хочет обновляться, что-то требует, Что мне нужно сделать что-бы она не ругалась?)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru