C# LanguageMétodos de extensión


Sintaxis

  • ReturnType estático público MyExtensionMethod (este objetivo TargetType)
  • ReturnType estático público MyExtensionMethod (este objetivo TargetType, TArg1 arg1, ...)

Parámetros

Parámetro Detalles
esta El primer parámetro de un método de extensión siempre debe ir precedido por this palabra clave, seguido del identificador con el que se refiere a la instancia "actual" del objeto que está extendiendo.

Observaciones

Los métodos de extensión son azúcares sintácticos que permiten invocar métodos estáticos en instancias de objetos como si fueran miembros del tipo en sí.

Los métodos de extensión requieren un objeto objetivo explícito. Deberá usar this palabra clave para acceder al método desde el propio tipo extendido.

Los métodos de extensiones deben declararse estáticos y deben vivir en una clase estática.

¿Qué espacio de nombres?

La elección del espacio de nombres para su clase de método de extensión es una compensación entre visibilidad y capacidad de descubrimiento.

La opción más comúnmente mencionada es tener un espacio de nombres personalizado para sus métodos de extensión. Sin embargo, esto implicará un esfuerzo de comunicación para que los usuarios de su código sepan que existen los métodos de extensión y dónde encontrarlos.

Una alternativa es elegir un espacio de nombres para que los desarrolladores descubran sus métodos de extensión a través de Intellisense. Entonces, si desea extender la clase Foo , es lógico colocar los métodos de extensión en el mismo espacio de nombres que Foo .

Es importante darse cuenta de que nada le impide usar el espacio de nombres de "otra persona" : por lo tanto, si desea extender IEnumerable , puede agregar su método de extensión en el espacio de nombres System.Linq .

Esto no siempre es una buena idea. Por ejemplo, en un caso específico, es posible que desee extender un tipo común ( bool IsApproxEqualTo(this double value, double other) por ejemplo), pero no tener que "contaminar" todo el System . En este caso, es preferible elegir un espacio de nombres local, específico.

Finalmente, también es posible poner los métodos de extensión en ningún espacio de nombres .

Una buena pregunta de referencia: ¿Cómo administra los espacios de nombres de sus métodos de extensión?

Aplicabilidad

Se debe tener cuidado al crear métodos de extensión para garantizar que sean apropiados para todas las entradas posibles y que no solo sean relevantes para situaciones específicas. Por ejemplo, es posible extender las clases del sistema como la string , lo que hace que su nuevo código esté disponible para cualquier cadena. Si su código necesita realizar una lógica específica del dominio en un formato de cadena específico del dominio, un método de extensión no sería apropiado ya que su presencia confundiría a los llamantes que trabajan con otras cadenas en el sistema.

La siguiente lista contiene características y propiedades básicas de los métodos de extensión.

  1. Debe ser un método estático.
  2. Debe estar ubicado en una clase estática.
  3. Utiliza la palabra clave "this" como primer parámetro con un tipo en .NET y este método será llamado por una instancia de tipo dada en el lado del cliente.
  4. También se muestra por VS intellisense. Cuando presionamos el punto . después de una instancia de tipo, entonces viene en VS intellisense.
  5. Un método de extensión debe estar en el mismo espacio de nombres que se usa o debe importar el espacio de nombres de la clase mediante una instrucción using.
  6. Puede dar cualquier nombre para la clase que tenga un método de extensión, pero la clase debe ser estática.
  7. Si desea agregar nuevos métodos a un tipo y no tiene el código fuente para ello, entonces la solución es usar e implementar métodos de extensión de ese tipo.
  8. Si crea métodos de extensión que tienen los mismos métodos de firma que el tipo que está extendiendo, los métodos de extensión nunca serán llamados.

Métodos de extensión Ejemplos relacionados