Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
.NET 4.x

Работа с событиями Delegate или Action

01.09.2016, 22:22. Показов 2804. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
К примеру, есть 2 класса:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class FirstClass
{
    private void SomeMethod()
    {
       string someString = "Оппа!";
    }
}
 
public class SecondClass
{
    private void RaiseMethod()
    {
       MessageBox.Show("Кто-то сказал: " + /*тут вставить значение строки someString*/)
    }
}
Как событиями реализовать метод MessageBox.Show с параметром из SecondClass при выполнении метода SomeMethod в FirstClass? Классы друг о друге ничего не знают (назначение у них ну совершенно разное), но вроде б могут через интерфейсы??

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2016, 22:22
Ответы с готовыми решениями:

В чем разница между Invoke Action и Invoke delegate (код внутри)
Добрый день! Не могли бы подсказать, в чем принципиальная разница? this.Invoke(new Action(() => { this.Text =...

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми элементами управления(toolbox).И если...

Работа с DataGridViewCellEventHandler Delegate
Люди подскажите пожайлуста private void button1_Click(object sender, EventArgs e) { modify mod = new...

6
18 / 18 / 0
Регистрация: 21.09.2012
Сообщений: 86
01.09.2016, 22:36
допустимо ли во внешнем коде привязывать RaiseMethod к событию класса FirstClass? смог придумать только такое решение, но пришлось оба метода для этого сделать public и RaiseMethod сделать методом, принимающим string, или так не подойдёт?
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
    public class FirstClass
    {
        public void SomeMethod()
        {
            string someString = "Оппа!";
            SomeMethodEvent?.Invoke(someString);
        }
 
        public event Action<string> SomeMethodEvent;
    }
 
    public class SecondClass
    {        
        public void RaiseMethod(string s)
        {
            MessageBox.Show("Кто-то сказал: " + s);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            FirstClass cl1 = new FirstClass();
            SecondClass cl2 = new SecondClass();
            cl1.SomeMethodEvent += cl2.RaiseMethod;
            cl1.SomeMethod();
            Console.ReadLine();
        }
    }
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
01.09.2016, 22:56  [ТС]
Цитата Сообщение от chelogrek Посмотреть сообщение
допустимо ли
Классы очень далеко друг от друга. Скажем так FirstClass - это некий Handler главного окна, а SecondClass это некий вспомогательный класс для глубоко зарытого контрола.

Цитата Сообщение от chelogrek Посмотреть сообщение
FirstClass cl1 = new FirstClass();
SecondClass cl2 = new SecondClass();
Вот такая то штука и не прокатает. Первый создаётся (к примеру) сейчас, а второй спустя многоманипуляций пользователем.
Все они под одним нэймспэйсом - не больше.

Добавлено через 6 минут
т.е. чтоб сработала такая штука
Цитата Сообщение от chelogrek Посмотреть сообщение
cl1.SomeMethodEvent += cl2.RaiseMethod;
нужно делать чуть ли не статичную ссылку на cl2 в class Program

Добавлено через 9 минут
Может какую цепочку придумать? Типа в классе срабатывает событие, которое Raise-ит событие из другого класса и всё это запихнуть в class Program
0
18 / 18 / 0
Регистрация: 21.09.2012
Сообщений: 86
01.09.2016, 23:11
а сделать событие статическим в классе FirstClass и при создании экземпляра SecondClass ссылаться на него не исправит сит-ю?
C#
1
FirstClass.SomeMethodEventStat += cl2.RaiseMethod;
но вообще наверное зря стал отвечать в этой теме - только учу язык, могу неверное предложить. в любом случае, будет интересно увидеть правильный ответ
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
01.09.2016, 23:15  [ТС]
Цитата Сообщение от chelogrek Посмотреть сообщение
а сделать событие статическим
А так можно? )))
Цитата Сообщение от chelogrek Посмотреть сообщение
только учу язык
Я ж сам тему в новичке создал не спроста
0
18 / 18 / 0
Регистрация: 21.09.2012
Сообщений: 86
01.09.2016, 23:24
ну, у меня сработал код, когда я поменял в FirstClass объявление события на
C#
1
public static event Action<string> SomeMethodEventStat;
и вызывал его в SomeMethod вместо SomeMethodEvent, а в Main заменил подписку на
C#
1
 FirstClass.SomeMethodEventStat += cl2.RaiseMethod;
т.е. формально это можно, но вроде бы тут пишут, что не очень хорошая практика http://stackoverflow.com/quest... ow-and-why
(сам что-то не могу понять, в чем принципиальная разница)
1
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
01.09.2016, 23:28  [ТС]
Цитата Сообщение от chelogrek Посмотреть сообщение
у меня сработал код
не сомневаюсь. Просто всё что связано со статиками жёстко критикуется. Что классы, что свойства. Теперь вот и с событиями тоже можно)))
А раз критикуется, то есть какой-то другой хитрый путь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2016, 23:28
Помогаю со студенческими работами здесь

Работа с событиями
Добрый вечер! Парни помогите разобраться с поставленной задачей: Есть событие pictureBox1_Paint, в нем происходят некие действия..., но...

Работа с COM-событиями
Здравствуйте! Не подскажете, пожалуйста, как работать с COM-событиями из powershell'а? Если конкретнее, то нужно реагировать на различные...

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

Работа С событиями(event) в С++
Пожалуйста помогите у меня таккя проблема..не могу разобраться с событиями :'(.....Есть 4 потока....в первом загружается текстовый файл с...

Перевести код с С# или Action Script или Vb net
new Date().time + &quot;_&quot; + int(Math.random() * int.MAX_VALUE); Convert.ToString((DateTime.UtcNow - New DateTime(1970, 1,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru