Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Непонятна обработка события (делегаты,события)


Автор: Alexanp 21.4.2016, 17:44
Подскажите с правильным написанием метода  SimulateClick(). Вроде работает одинаково в обоих случаях.  
Конструкция "event MyDelegate Click" что означает ? "Click" - это же имя события ? 
В этой конструкции два моих имени "MyDelegate" и "Click" объединяются словом "event" и что получается ?



Код


using System;

delegate void MyDelegate();

class Button
{
  public event MyDelegate Click;

// как правильно писать.  1-ый вариант написания:
  public void SimulateClick()
  {
      Click();
  } 
// или так.  2-ой вариант написания:
  public void SimulateClick()
  {
      MyDelegate deleg = Click;
      deleg();
  } 


};
  
  
class App
{
  static void Handler()  { Console.WriteLine("Hello, World!");  }

  static void Main()
  {
    Button sc = new Button();
    sc.Click += Handler;

    sc.SimulateClick();
  }
};

Автор: Angel_666 22.4.2016, 08:46
https://habrahabr.ru/post/213809/
оставляй первый.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Neponyatna-obrabotka-sobytiya-(delegatysobytiya)-id5718e76eae20158b128b4567#findElement_E7045_5719ba9aae2015bd07f99e41_0

Автор: chupachups 22.4.2016, 09:51
Если не хочешь проблем с эксепшинами - пиши:
Код

if(this.Click != null)
    this.Click()


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Neponyatna-obrabotka-sobytiya-(delegatysobytiya)-id5718e76eae20158b128b4567#findElement_E7045_5719ca11ae20153b1bf9a252_0

Автор: infarch 22.4.2016, 12:53
Цитата(chupachups @  22.4.2016,  09:51 Найти цитируемый пост)
Если не хочешь проблем с эксепшинами - пиши


Надо учесть что другой поток может обнулить Клик уже после проверки, отвязав событие. Надо так:
Код

var c = this.Click;
if(c!=null)
  c();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)