Обработчики событий C#

Ниже приведено описание BigQuery Standard SQL.

#standardSQL
SELECT 
  DATE_FROM_UNIX_DATE(date_column_as_number_of_days_since_epoch) date_since_epoch,
  IFNULL(SAFE_CAST(Delivered_Cost AS FLOAT64), 0.0) AS Delivered_Cost,
  IFNULL(SAFE_CAST(Actual_Cost AS FLOAT64), 0.0) AS Actual_Cost
FROM `project.dataset.table`   

. Вы можете проверить его, поиграть с ним, используя фиктивные данные, как показано ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 
    43397 AS date_column_as_number_of_days_since_epoch,  
    '123' AS Delivered_Cost,
    ' - ' AS Actual_Cost 
)
SELECT 
  DATE_FROM_UNIX_DATE(date_column_as_number_of_days_since_epoch) date_since_epoch,
  IFNULL(SAFE_CAST(Delivered_Cost AS FLOAT64), 0.0) AS Delivered_Cost,
  IFNULL(SAFE_CAST(Actual_Cost AS FLOAT64), 0.0) AS Actual_Cost
FROM `project.dataset.table`   

, с результатом как

Row date_since_epoch    Delivered_Cost  Actual_Cost  
1   2088-10-25          123.0           0.0     
[117 ] Примечание: я предполагаю, что 43379, который вы используете в качестве примера в своем вопросе, на самом деле является числом дней с начала эпохи - как это наиболее разумно с моей точки зрения - дайте нам знать, если это что-то еще, поэтому я буду скорректировать ответ соответственно

9
задан Jon Skeet 24 October 2008 в 08:53
поделиться

4 ответа

Вы не можете. События просто выставляют, "добавьте, что обработчик" и "удаляет обработчик" - это - все. (На самом деле в CLR у Вас могут также быть метаданные для соединения метода с "огнем событие", но компилятор C# никогда не генерирует это.) Издатели события Some могут предложить дополнительный, означает проверять, существуют ли какие-либо подписчики (или действительно позвольте Вам видеть тех подписчиков), но это не часть самого шаблона события.

См. мою статью о событиях для получения дополнительной информации или посмотрите на тег событий (который я собираюсь добавить к этому вопросу).

17
ответ дан 4 December 2019 в 11:45
поделиться

Почему Вам нужно это? Каков контекст? Возможно, существует лучший способ достигнуть результата
Кнопка является внешним объектом и что Вы пытаетесь сделать, проверить, его внутренний список подписчиков, не спрашивая это. Это нарушает инкапсуляцию..
Необходимо всегда позволять объекту управлять подписчиками для событий, которые он выставляет. Если бы это хотело, чтобы клиенты знали, это выставило бы метод HasClientsRegistered. Не врываться.

1
ответ дан 4 December 2019 в 11:45
поделиться

Я думаю, что Вы можете, если Вы находитесь в классе, который генерирует событие.

Можно определить обработчик и перечислить каждого.

например, Если Ваше событие определяется как

event System.EventHandler NewEvent;

Затем на методе события повышения Вы могли бы создать Вас, может сделать...

    EventHandler handler = NewEvent;
    if(handler != null)
    {
      handler(this, e);
    }

Это даст Вам обработчик и от которого можно получить Список Вызова.

0
ответ дан 4 December 2019 в 11:45
поделиться

EventDescriptor e = TypeDescriptor.GetEvents (yourObject) .Find ("yourEventName", true);

0
ответ дан 4 December 2019 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: