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 más probablemente un adjetivo porque una interfaz de método único a menudo se puede reemplazar con un delegado.
Algunos pensamientos:
delegate object ValueExtracting(object container);
delegate object ValueExtractor(object container);
delegate object ValueExtractionHandling(object container);
delegate object ValueExtractionHandler(object container);
fuente
RequestDelegate
para asp.net-core; -]Las Pautas de diseño de marcos de Microsoft, el almanaque de nomenclatura para mí, dice lo siguiente sobre el tema:
fuente
ProcessBookDelegate
...RequestDelegate
en asp.net-core - tanto a las convenciones de coherencia y codificación. Supongo que ni siquiera leen sus propios documentos.Dado que un delegado es algo que realiza una acción (un verbo), el delegado debe llamarse como llamarías a algo que realiza esa acción. Tomemos
Converter<TInput, TOutput>
por ejemplo. El verbo es Convertir . Lo que hace la conversión se llama convertidor , de ahí el nombre del delegado.fuente
Esto depende de algunas cosas.
Si el delegado se va a utilizar como un evento, siempre debe denominarse
EventHandler
subtipo, por ejemplo:public delegate void ValueExtractingEventHandler(object sender, ValueExtractingEventArgs e);
Si no es un evento, entonces las pautas de codificación de MS (de las que nunca parece encontrar la copia correcta en Google) recomiendan explícitamente no incluir palabras como "delegado" o "controlador" en el nombre del delegado, excepto en el caso especial de
EventHandler
tipos.Normalmente, los delegados deben tener nombres de acciones , que serían como
ValueExtracting
(si el delegado ocurre antes de que se extraiga el valor) oValueExtracted
(después de la extracción).La
Func<T1, T2, ..., TResult>
sintaxis de delegado 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 en absoluto, solo use uno existente:object ExtractObject(object source, Func<object, object> extractor);
Esta sintaxis es mejor cuando el delegado se utiliza como cierre . El delegado en sí no tiene un nombre muy interesante, pero el argumento es un sustantivo de agente (extractor, proveedor, evaluador, selector, etc.)
La mayoría de los usos de los delegados encajan en una de las categorías anteriores, así que averigüe para cuál se está usando, elija apropiadamente.
fuente
Nunca pensé en ello, sobre todo porque sólo tiene que utilizar uno de los
EventHandler<T>
,Func<T>
oAction<T>
sobrecargas y nunca molesto en la definición de la mía. Probablemente elegiría ValueExtractor de los que ha enumerado. Esto hace que suene más como un objeto, y cuando lo invoques, lo usarás para realizar una acción. Por ejemplo:ValueExtractor extractor += Blah; var value = extractor(data);
Además, la mayoría de los delegados integrados también se nombran como sustantivos. En caso de duda, siga el marco .NET.
fuente
Yo iría 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é ...
fuente
Según
Enumerable.Sum
, pasaría al delegado comoFunc<object, object>
y nombraría el parámetroselector
:void Foo(Func<object, object> selector) ...
Si tiene que crear su propio delegado para ello, lo aceptaría,
ValueExtractor
ya que ese es el nombre más descriptivo de lo que hace.fuente