2009-06-08 14 views
5

Supongamos que tengo una clase que exponga el suceso siguiente:métodos de asignación de nombres que están registrados para eventos

public event EventHandler Closing 

¿Cómo deben métodos que están registrados para este evento serán nombrados? ¿Prefiere seguir la convención que Visual Studio usa cuando asigna nombres a los métodos que genera (también conocido como. + =, Tab, Tab)? Por ejemplo:

private void TheClass_Closing(object sender, EventArgs e) 

¿O utiliza su propio estilo para nombrar estos métodos?

He intentado diferentes formas de nombrar estos métodos (como TheClassClosing, HandleClosing, etc.). Pero no he encontrado un buen estilo para indicar que la intención de un método es manejar un evento registrado. Personalmente, no me gusta el estilo (guión bajo) que Visual Studio usa para generar nombres de métodos.

sé que los métodos de control de eventos registrados son siempre privadas y que no hay una convención de nombres como el de métodos que elevan eventos (por ejemplo, OnClosing).

+0

Mientras que el verbo "registrar" se usa en esta pregunta, Microsoft utiliza con frecuencia el verbo ["suscribirse"] (https://msdn.microsoft.com/en-us/library/ms366768.aspx) – DavidRR

Respuesta

2

Las dos opciones comunes para nombrar es bien después de lo que el método hace:

theObject.Closing += SaveResults; 

O, alternativamente, después de lo que maneja el método:

theObject.Closing += ClosingHandler; 

lo cual es preferible realmente depende un poco en el contexto.

En el primer caso, queda inmediatamente claro lo que el controlador va a hacer, lo que hace que el código que registra el controlador sea más legible ... pero mirando el controlador SaveResults de forma aislada, no va a ser necesariamente obvio cuando se va a llamar, a menos que los argumentos del evento tengan un nombre obvio (ClosingEventArgs o algo similar).

En el segundo caso, el registro es más opaco (está bien, entonces, ¿qué va a pasar cuando ocurra Closing?), Pero por otro lado, mirando la implementación del manejador, será obvio lo que está pasando.

Supongo que el que elegir depende de cuál de los dos quiere ser más obvio; el sitio del registro o la implementación del controlador.

O, alternativamente, se puede ir por la combinación profana de los dos métodos:

theObject.Closing += ClosingHandlerSaveResults; 

Ahora tanto el sitio de registro y la implementación son igualmente obvio, y tampoco se ve muy elegante (además, es probable que viole la SECO principio).

Para el registro prefiero el primer esquema de nombres cuando theObject está contenido en un ámbito diferente de la implementación de SaveResults, y el segundo esquema cuando estoy conectando manejadores a eventos que están todos contenidos dentro de la misma clase.

0

Indico mis controladores de eventos de forma similar a los creados por Visual Studio (la pestaña +, =, pestaña que mencionas). Intento que mi nombre sea coherente en mi código, y sé que crearé manejadores con el auto creador de VS al menos algunas veces.

Los caracteres de subrayado no me molestan.

0

quizá: OnObjectNameEventName, como

private void OnTheClassClosing(object sender, EventArgs e) 

Esto coincide con los métodos de eventos internos, y con la adición del nombre del objeto, se debe ayudar a diferenciar, además, el método para elevar los eventos son controladores de eventos esencialmente internos

El usuario hace clic en formulario, realiza llamadas OnClicked, hace lo suyo, y luego plantea el evento Clicked, solo sería natural desde mi punto de vista.

+1

debido a MFC, el estilo "OnSomeEvent" está arraigado en muchos programadores (incluido yo mismo). Desafortunadamente, Microsoft decidió cambiar el significado de esto para "enviar un evento" en lugar de "recibir un evento", lo que hace que el código .net se confunda innecesariamente. Ahora uso RaiseSomeEvent para enviar un evento y he adoptado la desagradable pero clara convención Sender_EventName(). Uso Many_EventName() en el caso en que un controlador de eventos está conectado a más de un remitente. –

+0

@Jason: ¿Entonces, cuando decide adjuntar a otro remitente, debe cambiar el nombre de su método? Aunque me gusta el nombre de RaiseSomeEvent ... tal vez empiece a usar eso en lugar de OnSomeEvent ... siempre encontré el último un poco ... mal ... – Svish

3

Nómbrelo después de lo que realmente hace el controlador.

// event += event handler 
saveButton.Click += SaveData(); 
startButton.Click += StartTheTimer(); 
+1

Me alegra ver que no soy el único quien hace esto Los métodos deben decir lo que hacen, no cómo se usan. El trabajo del cableado del evento es claro :) –

+1

@DavidRR: Bueno, eso es una guía para nombrar a los delegados, lo que rara vez es relevante en estos días con 'EventHandler '. Ciertamente no me gustaría tener un tipo de delegado independiente para cada evento que se haya creado. La pregunta del OP no pregunta sobre nombrar al delegado, ya que están usando 'EventHandler'. Básicamente, creo que su respuesta no es una respuesta a la pregunta que se ha formulado ... –

+0

Para dar contexto al comentario de Jon, que es en respuesta a una respuesta mía que he eliminado, Microsoft proporciona una guía para [nombrar ** evento controladores ** (los delegados se utilizan como tipos de eventos)] (https://msdn.microsoft.com/en-us/library/ms229012%28v=vs.110%29.aspx). Pero el término "controlador de eventos" utilizado en este contexto es * no * el mismo que el método que se suscribe (registra) a un evento. – DavidRR

Cuestiones relacionadas