Методы именования, которые зарегистрированы для событий - PullRequest
5 голосов
/ 08 июня 2009

Предположим, у меня есть класс, который предоставляет следующее событие:

public event EventHandler Closing

Как должны именоваться методы, зарегистрированные для этого события? Предпочитаете ли вы следовать соглашению, которое Visual Studio использует, когда присваивает имена генерируемым методам (aka. + =, Tab, Tab)? Например:

private void TheClass_Closing( object sender, EventArgs e )

Или вы используете свой собственный стиль для именования этих методов?

Я пробовал разные способы называть эти методы (например, TheClassClosing, HandleClosing и т. Д.). Но я не нашел хорошего стиля, который бы указывал, что целью метода является обработка зарегистрированного события. Мне лично не нравится стиль (подчеркивание), который Visual Studio использует для генерации имен методов.

Я знаю, что зарегистрированные методы обработки событий всегда являются закрытыми и что не существует соглашения о присвоении имен, например, для методов, которые вызывают события (например, OnClosing).

Ответы [ 4 ]

3 голосов
/ 08 июня 2009

Назовите его после того, что на самом деле делает обработчик.

// event += event handler
saveButton.Click += SaveData();
startButton.Click += StartTheTimer();
2 голосов
/ 08 июня 2009

Два общих параметра для именования - либо после того, что делает метод:

theObject.Closing += SaveResults;

Или, альтернативно, после того, как метод обрабатывает:

theObject.Closing += ClosingHandler;

Что предпочтительнее, немного зависит от контекста.

В первом случае сразу становится ясно, что собирается делать обработчик, что делает код, регистрирующий обработчик, более читабельным ... но если смотреть на обработчик SaveResults в отдельности, это не обязательно будет очевидно, когда он будет вызван, если аргументы события не имеют очевидного имени (ClosingEventArgs или чего-то подобного).

Во втором случае регистрация более непрозрачна (хорошо, так что же произойдет, когда произойдет Closing?), Но с другой стороны, если посмотреть на реализацию обработчика, будет очевидно, что происходит.

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

Или же вы можете пойти на нечестивую комбинацию обоих методов:

theObject.Closing += ClosingHandlerSaveResults;

Теперь и сайт регистрации, и реализация одинаково очевидны, и ни один из них не выглядит особенно элегантно (плюс, вероятно, он нарушает принцип СУХОЙ).

Для записи я предпочитаю первую схему именования, когда theObject содержится в области, отличной от реализации SaveResults, и вторую схему, когда я подключаю обработчики к событиям, которые содержатся в одном классе .

0 голосов
/ 08 июня 2009

может быть: OnObjectNameEventName, например

private void OnTheClassClosing(object sender, EventArgs e)

Это соответствует методам внутренних событий, и с добавлением имени объекта, это должно помочь дифференцировать, кроме того, метод для вызова событий по сути является внутренними обработчиками событий

Пользователь щелкает форму, формирует вызовы OnClicked, делает свое дело, затем вызывает событие Clicked, с моей точки зрения это было бы естественно.

0 голосов
/ 08 июня 2009

Я называю свои обработчики событий аналогично тем, которые были созданы в Visual Studio (вкладка +, =, tab, которую вы упоминаете). Я стараюсь, чтобы мои имена были согласованы в моем коде, и я знаю, что по крайней мере некоторое время буду создавать обработчики с помощью автоматического создателя VS.

Подчеркивание не беспокоит меня.

...