.net delegates naming-conventions

¿Convención de nomenclatura apropiada para un tipo de delegado.NET?



delegates naming-conventions (7)

Basado en Enumerable.Sum , pasaría el delegado como Func<object, object> y nombraré el selector parámetros:

void Foo(Func<object, object> selector) ...

Si tiene que crear su propio delegado, iría con ValueExtractor ya que ese es el nombre más descriptivo para lo que hace.

Por convención, las clases a menudo se nombran como sustantivos, métodos como verbos e interfaces como adjetivos.

¿Cuál es la convención de nomenclatura común para un delegado? ¿O cuál es una buena manera de diferenciar su nombre cuando los delegados se enumeran entre tipos y otras cosas?

Mi suposición inmediata es nombrar a un delegado como un adjetivo, ya que una sola interfaz de método a menudo puede ser reemplazada por un delegado.

Algunos pensamientos:

delegate object ValueExtracting(object container); delegate object ValueExtractor(object container); delegate object ValueExtractionHandling(object container); delegate object ValueExtractionHandler(object container);


Como un delegado es algo que realiza una acción (un verbo), el delegado debe nombrarse como lo que llamaría algo que realiza esa acción. Tome el Converter<TInput, TOutput> por ejemplo. El verbo es Convertir . Lo que hace la conversión se llama convertidor , de ahí el nombre del delegado.


Esto depende de algunas cosas.

Si el delegado se va a usar como un evento, siempre se debe hacer referencia a él como un subtipo EventHandler , por ejemplo:

public delegate void ValueExtractingEventHandler(object sender, ValueExtractingEventArgs e);

Si no es un evento, entonces las pautas de codificación de MS (que nunca encontraré en Google la copia correcta) explícitamente recomiendan no incluir palabras como "delegar" o "manejador" en el nombre del delegado, excepto en el caso especial de Tipos de EventHandler .

Normalmente, los delegados deben nombrarse después de las acciones , que serían como ValueExtracting (si el delegado sucede antes de que se extraiga el valor) o ValueExtracted (después de la extracción).

La sintaxis de delegado Func<T1, T2, ..., TResult> también se está volviendo más común, pero a menos que tenga 4 o más parámetros, no necesita declarar el suyo, solo use uno ya existente. :

object ExtractObject(object source, Func<object, object> extractor);

Esta sintaxis es mejor cuando el delegado se usa como cierre . El delegado no tiene un nombre muy interesante, pero el argumento es un sustantivo agente (extractor, proveedor, evaluador, selector, etc.)

La mayoría de los usos de delegados se ajustan a una de las categorías anteriores, por lo tanto, averigüe para cuál se usa para elegir adecuadamente.


Me gustaría ir con ValueExtraction ..
Nunca pensé por qué, pero supongo que porque estás almacenando una operación y debería ser un sustantivo ... estrictamente, esto no es una operación, lo sé ...


Nunca lo pensé, sobre todo porque solo uso una de las sobrecargas EventHandler<T> , Func<T> o Action<T> y nunca me tomo la molestia de definir la mía. Probablemente elegiría ValueExtractor de los que has enumerado. Esto hace que suene más como un objeto, y cuando lo invoque utilizará ese objeto para realizar una acción. Por ejemplo:

ValueExtractor extractor += Blah; var value = extractor(data);

Además, la mayoría de los delegados incorporados se nombran como sustantivos también. En caso de duda, siga el marco .NET.


Personalmente utilizo un par de patrones diferentes:

[Task][State]Handler - UITaskFinishedHandler

Controlador [Event]Handler - ControlLoadedHandler

[Function Name]Delegate - DoSomeWorkDelegate - se usa cuando necesito crear un delegado para llamar a una función en un hilo diferente / nuevo

[Task]Callback - ContainerLoadedCallback - se usa cuando el control A inicia una acción que controla B hace la mayor parte del trabajo y el control A pasa una dependencia al control B (es decir, ControlA puede haber pasado un contenedor UI para que el ControlB lo complete y necesita notificación a de hecho muestra el contenedor)

Cuando tienes un proyecto que utiliza muchas llamadas WCF multicadena o asincrónicas, puedes terminar con muchos delegados flotando, por lo que es importante adoptar un estándar que al menos tenga sentido para ti.


Directrices de diseño del marco : el almanaque de nombres para mí, dice lo siguiente sobre el tema:

√ DO agregue el sufijo "EventHandler" a los nombres de los delegados que se utilizan en los eventos.
√ DO agregar el sufijo "Devolución de llamada" a los nombres de los delegados que no sean los utilizados como controladores de eventos.
X NO agregue el sufijo "Delegar" a un delegado.