Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Romeo13
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
#1

Можно ли передавать событие по ссылке

20.10.2012, 14:32. Просмотров 737. Ответов 2
Метки нет (Все метки)

Вопрос скорей риторический. У меня не заработала такая схема:

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
class A
{
      private Action MyDelegate;
      private Timer MyTimer;
 
      public A ( Action SomeAction ) { MyDelegate = SomeAction; MyTimer = new Timer(); MyTimer.Tick += MyDelegate; }
}
class B
{
      public event Action MyEvent;
      private A MyA;
 
      public B()
      {
           MyA = new MyA(MyEvent);
      }
}
class C
{
      public B MyB;
 
      public C()
      {
            B = new MyB;
            B.MyEvent += Event;
      }
 
      private Event() { \* чёнить *\ }
}
Коротко поясняю: Событие передается по ссылке и выполняется по таймеру. Таймер работает, советы типа Timer.Enabled и Timer.Interval помойму очевидны, да и это схема а не программа. Проблема: подпрограмма Event() никогда не выполняется.
Вопрос: ошибка в моей программе или в C# нельзя передавать события как ссылки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2012, 14:32
Ответы с готовыми решениями:

Можно ли передавать параметры в класс, не указывая метод
Есть такой: public static class Log { public static TextBox...

Можно ли передавать ссылку процедуры как параметр?
Здравсвтуйте,можно ли передавать ссылку процедуры как параметр ? и как...

Можно ли не передавать значения из конструктора дочернего класса в базовый
У меня есть абстрактный класс (пусть будет A), от которого наследуются 4 класса...

Как можно передавать данные из dll в свое приложение на C#?
Например, стороннее приложение вызвало функцию моей dll "MyInt" c аргументом...

Модифицировать программу так, чтобы можно было передавать функцию в виде делегата
Модифицировать программу нахождения минимума функции так, чтобы можно было...

2
turbanoff
Эксперт Java
4015 / 3750 / 741
Регистрация: 18.05.2010
Сообщений: 9,329
Записей в блоге: 11
Завершенные тесты: 1
20.10.2012, 17:01 #2
Цитата Сообщение от Romeo13 Посмотреть сообщение
Событие передается по ссылке и выполняется по таймеру
События не могут передаваться по ссылке - передаются только список делегатов, которые уже добавлены в событие.
Иначе бы терялись все преимущества событий, перед обычными делегатами.

Добавлено через 3 минуты
Упростил ваш пример до компилируемого состояния:
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
    class A
    {
          public Action MyDelegate;
          public A(Action SomeAction) { MyDelegate = SomeAction; }
    }
    class B
    {
          public event Action MyEvent;
          public A MyA;
 
          public B()
          {
              MyEvent += () => Console.WriteLine("added before pass event"); //добавляем один делегат до того как передали MyEvent в другой класс
              MyA = new A(MyEvent);
          }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.MyEvent += () => Console.WriteLine("added after pass event"); //добавили делегат после того как педали MyEvent в другой класс
            b.MyA.MyDelegate();
            Console.ReadKey();
        }
    }
Выводится только added before pass event.
2
Romeo13
6 / 6 / 0
Регистрация: 01.08.2011
Сообщений: 133
20.10.2012, 17:43  [ТС] #3
turbanoff, спасибо, доходчиво.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 17:43

Можно ли передать в метод свойство по ссылке
Имеется метод int metod(ref Peremennia peremennia ) { metod++; ......

Изменить программу вывода функции так, чтобы можно было передавать функции типа double
Помогите разобраться. Изменить программу вывода функции так, чтобы можно было...

Как грамотно реализовать disconnect, чтобы можно было соединяться с сокетом по той же ссылке
Привет c# сообщество уже 3 вечера бьюсь с одной проблемой.. совсем беда ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru