Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221

Как вызвать событие передающее само себя?

21.06.2023, 01:44. Показов 802. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть такое вот событие. понимаю что передвать самого себя бессмыслица, но все же... ))
C#
1
public static Func <int, Func<int, bool>, bool> MyFunc;
пробую вот так:
C#
1
MyFunc?.Invoke(index, MyFunc);
но второй параметр при вызове подчеркивает "не возможно преобразовать из System.<int, System.Func<int, bool>, bool> в System.<int, bool>"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.06.2023, 01:44
Ответы с готовыми решениями:

Как приложение скопировать само себя в обход подозрениям антивирусов?
Для проекта необходимо, чтобы приложение располагалось в определенной папке. ДЛя этого при его старте я в условии проверяю путь и если он...

Как задать произвольное окончание строки (само-ход, само-свал, само-идентификация)?
делаю словарь нецензурных слов, сам словарь решил делать так: List&lt;string&gt; salmons = new List&lt;string&gt; {...

Делится на само себя и на один?
Вводится целое положительное число n (В интервале от 1 до 10000). Проверить,является ли число n простым (то есть оно делится только на...

15
403 / 265 / 69
Регистрация: 12.04.2020
Сообщений: 1,404
21.06.2023, 02:17
Цитата Сообщение от Gammister Посмотреть сообщение
есть такое вот событие
это не событие
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
21.06.2023, 03:46  [ТС]
это все что ты мог пукнуть ? ну фиг с ним, это делегат.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
21.06.2023, 08:59
Gammister, не знаю где вы тут увидели "сам себя". Нужно передать метод с сигнатурой bool xyz(int). Например
C#
1
MyFunc?.Invoke(index, i => i>=3 && i<=9);
C#
1
2
bool Check(int i) => i>=3 && i<=9;
MyFunc?.Invoke(index, Check);
Добавлено через 9 минут
Цитата Сообщение от Gammister Посмотреть сообщение
Как вызвать событие передающее само себя?
Увидел в соседней теме что вы пытаетесь сделать. Мой ответ выше можно игнорировать. Почему вам так важно чтобы метод мог вызываться только через событие?
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
21.06.2023, 10:44  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему вам так важно чтобы метод мог вызываться только через событие?
чтобы не вызвать его случайно напрямую. просто случайно написал его вызов и потом думаю : "стоп. мне так не нужно". короче разбираюсь с языком. особой важности нет, но для практики и освоения вполне сойдет такой опыт.
а еще изначальная задумка была в корутине(это из Unity) в цикле while дождаться вызова события, с помощью костылей получилось, но штатного функционала с шарпе нет. в том разделе посоветовали передавать в параметр этот Func и проверять == это ли это событие.но похоже это бессмыслица, но все равно извращаюсь теперь. зациклило немного. )
но странно, что вы передаете bool как параметр,там же Func передается, а bool это возвращаемое значение.
вы в компиляторе писали этот код ?

Добавлено через 3 минуты
ладно, кажется я понял ))
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
21.06.2023, 13:51
Цитата Сообщение от Gammister Посмотреть сообщение
но странно, что вы передаете bool как параметр,там же Func передается, а bool это возвращаемое значение.
Не понимаю о чем вы. В обоих примерах bool это возвращаемое значение.

Цитата Сообщение от Gammister Посмотреть сообщение
вы в компиляторе писали этот код ?
В компиляторе код не пишут Я прямо на форуме его набрал и не проверил. Из-за это в код вкралась ошибка. Уже поправил.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
27.06.2023, 00:23
Выглядит как будто что у вас намудрено с архитектурой. Либо неправильно используете событие, либо стоит почитать о всяких блокировках (Семафоры или там ManualResetEvent).

Добавлено через 55 секунд
P.S. учитывая что это Unity, также не исключаю что ваша задача вообще решается по другому средствами фреймворка.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
27.06.2023, 20:56
Цитата Сообщение от Gammister Посмотреть сообщение
Как вызвать событие передающее само себя?
Прикола ради:
C#
1
2
3
4
5
6
7
8
9
10
11
    Action<int, Delegate> someDelegate = (num, dl) =>
    {
        WriteLine(num);
        num--;
        if (num < 0)
            return;
        Action<int, Delegate> action = (Action<int, Delegate>) dl;
        action(num, dl);
    };
 
    someDelegate(5, someDelegate);
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
27.06.2023, 21:13  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Как вызвать событие передающее само себя?
спасибо ! сама цель с самого начала была корутина, ждущая событие. без "выдумок" не получилось. вот и завел тему, что бы понять не зря ли я костылями решил вопрос... вдруг проще можно было
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,687
Записей в блоге: 2
27.06.2023, 21:58
Цитата Сообщение от Gammister Посмотреть сообщение
сама цель с самого начала была корутина, ждущая событие. без "выдумок" не получилось. вот и завел тему, что бы понять не зря ли я костылями решил вопрос... вдруг проще можно было
Раз вы разрешили вопрос, то теперь можно вопрос?

Цитата Сообщение от Gammister Посмотреть сообщение
чтобы не вызвать его случайно напрямую
В чём же всё-таки причина запрета или нежелания запускать этот метод напрямую? Даже случайно, даже изнутри класса. Надеюсь всё-таки услышать причину, а не сомнения и предположения.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
27.06.2023, 22:00
Цитата Сообщение от Gammister Посмотреть сообщение
сама цель с самого начала была корутина, ждущая событие.
В Шарпе это решается по другому.
Если вы опишите не то КАК вы хотите решить задачу, а ЧТО вы хотите решить, то с большой вероятностью вам подскажут правильный способ решения.
1
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
27.06.2023, 22:11  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
В чём же всё-таки причина запрета или нежелания запускать этот метод напрямую? Даже случайно, даже изнутри класса. Надеюсь всё-таки услышать причину, а не сомнения и предположения.
в том, что метод подписан на событие а не на вызов напрямую. думал есть модификатор доступа какой нибудь, чтобы сам компилятор не давал его так вызвать.
метод наносит урон игроку. без события это ненужно делать. все ведь просто довольно.
но на то я и начинающий, что бы узнавать что-то новое и спрашивать.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
27.06.2023, 22:20
Цитата Сообщение от Gammister Посмотреть сообщение
без события это ненужно делать. все ведь просто довольно.
Тогда вариант с лямбдой будет наилучшим.

Добавлено через 44 секунды
Вызов метода подписанного на событие
0
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
27.06.2023, 22:22  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
В Шарпе это решается по другому.
всем спасибо !
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
28.06.2023, 04:32
Цитата Сообщение от Gammister Посмотреть сообщение
метод наносит урон игроку. без события это ненужно делать. все ведь просто довольно.

Не по теме:

Что и требовалось доказать. На будущее -- озвучивайте что хотите сделать, а не как пытаетесь это решить.



Всё гораздо проще -- инкапсуляция. Вы просто пакуете всю вашу логику в отдельный класс, который выполняет внутри себя подписку на тригер и вызывает урон игроку. Извне этого класса никак не вызвать метод, а если кто-то захочет залезть внутрь и поменять логику -- его не остановит даже алах.

Примитивный пример: игрок отрывает дверь, и срабатывает ловушка

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
public enum ActionType 
{ 
    ToOpenDoor
}
 
public class Player
{
    public event Action<ActionType> OnAction;
 
    public int Health { get; private set; }
 
    public void Damage(int val) 
    {
        Health -= val;
    }
 
    public void ToOpenDoor()
    {
        OnAction?.Invoke(ActionType.ToOpenDoor);
    }
}
 
public class Trap
{
    Player player;
 
    public Trap(Player player)
    {
        this.player = player;
        player.OnAction += TriggerAction;
    }
 
    private void TriggerAction(ActionType actionType)
    {
        if(actionType == ActionType.ToOpenDoor)
            player.Damage(10);
    }
 
}
Но опять же: так как речь об играх, там может быть более продвинутое решение по завязке на определенные тригеры, так как игровой движок накладывает свои правила работы.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если вы опишите не то КАК вы хотите решить задачу, а ЧТО вы хотите решить, то с большой вероятностью вам подскажут правильный способ решения.
Это текст пора вынести на страничку создания темы. Особенно если создают в разделе для начинающих. Правда читать его никто не будет.

4
399 / 308 / 104
Регистрация: 07.05.2017
Сообщений: 2,221
28.06.2023, 04:56  [ТС]
благодарю !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.06.2023, 04:56
Помогаю со студенческими работами здесь

Приложение обновляет само себя
Всем привет! Имеется патчер, который сравнивает по имени файла хеш md5 папки клиента со списком на сервере: имя хеш Какие есть способы...

в прерывании запретить само себя - возможно?
в pcint0 настраиваем таймер, запускаем его, отключаем pcint0, а по переполнению таймера включаем pcint0 обратно - так допускается?

Число, переходящее само в себя, - постоянная Капрекара
Доброго времени суток! Не получается решить задачку! Возьмем четырехзначное число, в котором не все цифры одинаковы, например 6264....

Как вызвать событие у тега <A>?
когда мы кликаем по тегу &lt;A&gt; браузер начинает загружать страницу указанную в артрибуте href; хочу вызвать именно это событие.Это можно...

Как программно вызвать событие ?
Добрый день. Допустим у меня есть событие: void MainWindow::resizeEvent(QResizeEvent *event) { //какие-то действия ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru