C # Action / Вопрос о стиле делегата - PullRequest
9 голосов
/ 13 июля 2009

Что считается лучшим стилем для определения события:

public event Action<object, double> OnNumberChanged;

или

public delegate void DNumberChanged(object sender, double number);
public event DNumberChanged OnNumberChanged;

Первый процесс требует меньше времени, но делегат дает имена параметрам. Когда я набираю это, я думаю, что номер 2 - победитель, но я могу ошибаться.

Редактировать: другой (третий) подход является победителем. Читайте ниже.

Ответы [ 5 ]

16 голосов
/ 13 июля 2009

Ни 1, ни 2. Третий вариант - победитель

public event EventHandler<NumberChangedEventArgs> NumberChanged;

Вы нарушаете ряд рекомендаций по стилю для разработки в C #, таких как использование типа для аргументов событий, который не расширяет EventArgs.

Да, вы можете сделать это таким образом, поскольку компилятору все равно. Однако люди, читающие ваш код, будут делать WTF.

11 голосов
/ 13 июля 2009

Не создавайте новый тип, если вам не нужно. Я думаю, что это лучше:

public event Action<object, double> OnNumberChanged;

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

2 голосов
/ 13 июля 2009

Обычно я использую производный класс EventArgs в качестве аргумента. Это делает код намного более последовательным.

У меня есть класс:

public class ApplyClickedEventArgs : EventArgs  
{  
   ...
}

и обработчик:

void cpy_ApplyClicked(object sender, ApplyClickedEventArgs e)  
{  
   ...  
}  

Декларация:

public event EventHandler<ApplyClickedEventArgs> ApplyClicked;
1 голос
/ 13 июля 2009

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

0 голосов
/ 13 июля 2009

Я думаю, что вариант 1 был бы лучше, если бы я выбрал, но IIRC, официальные правила для событий, утверждают, что вашим вторым параметром должен быть класс с именем XxxEventArgs, и в его наследовании должен быть EventArgs цепь.

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