События Naming C# и обработчики правильно [закрываются]

21
задан bplus 23 July 2010 в 09:56
поделиться

5 ответов

Ну, во-первых, вы определяете свое собственное соглашение об именах и не существует «неправильного» способа сделать это (если оно согласовано).

При этом стандарты Microsoft хороши, если вы делитесь своим кодом с другими.

Обычно имена событий имеют следующий вид:

public class Car
{
 // is event named correctly?
 public event EventHandler<EventArgs> SomethingHasHappened;

 private void MoveForward()
 {
  OnSomethingHasHappened();
 }

 // is the named correctly
 protected virtual void OnSomethingHasHappened()
 {
  EventHandler<EventArgs> locum = SomethingHasHappened;
  if(locum!= null)
  {
   locum(this, new EventArgs()); 
  }
 }
}

Обратите внимание, что событие названо без префикса «Вкл.», А метод запуска события имеет имя с префиксом «Вкл.». Метод запуска события также защищен виртуальным , так что производные классы могут переопределить, чтобы изменить / добавить к поведению, а также использовать его для запуска самого события, когда это необходимо.

7
ответ дан 29 November 2019 в 20:54
поделиться

Я лично смотрю, как Microsoft называет свои события и как они называют свои обработчики.

class Form{
   public event EventHandler<EventArgs> MouseMove;
   public virtual void OnMouseMove()
   {
       if(MouseMove != null)
       {
           MouseMove(this, new EventArgs());
       }
   }
}

class Application{
   public Application()
   {
       Form form = new Form();
       form.MouseMove += //Hook your own Method
   }
}
1
ответ дан 29 November 2019 в 20:54
поделиться

Я бы сказал, что соглашение об именовании в порядке, но мне не хватает в вашем примере ЧТО произошло?

Поэтому я бы больше специализировался на названии самого события (например, MovedForward) или, если вам нужно более обобщенно, вы должны предоставить некоторую дополнительную информацию в EventArgs о том, что изменилось (как ListChanged в BindingList).

1
ответ дан 29 November 2019 в 20:54
поделиться

Почти

Метод для запуска события - OnEvent (из RaiseSomethingHasHappened)

i. e. OnBeforeOpen, OnClosing, OnSomethigHasHappened

Событие Event (из OnSomethingHasHappened)

i. e. BeforeOpen, Closing, SomethingHasHappened

обработчик <Инстанс или содержательное имя><_> (из Car_SomethingHasHappened)

i. e. Form_BeforeOpen, Window_Closing, Car_SomethingHasHappened -> perfect

22
ответ дан 29 November 2019 в 20:54
поделиться

Я обычно делаю наоборот:

public event EventHandler SomethingHappened;

private void OnSomethingHappened()
{
    SomethingHappened();
}

Затем:

private void Car_SomethingHappened()
{

}

Не самый чистый код, но именование - это то, как я это делаю. Если нет четкого имени локальной переменной или оно не имеет смысла, я добавляю к имени "Handler":

private void SomethingHappenedHandler() {}
5
ответ дан 29 November 2019 в 20:54
поделиться
Другие вопросы по тегам:

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