Los métodos de extensión como su nombre indica amplían la funcionalidad o usabilidad del tipo de destino.
- Estos métodos se pueden agregar más tarde (que el tipo de tiempo de creación) después de que el tipo ya se haya publicado.
- Se pueden escribir por diferentes grupos de personas
- Los métodos de extensión pueden orientar las interfaces. (La alternativa habría sido tener un tipo de base común que tenga estos métodos o volver a implementarlos en cada tipo)
- Diferentes personas pueden extender el mismo tipo de forma diferente según sus necesidades.
El uso correcto de métodos de extensión puede eliminar el desorden ortogonal de la definición/implementación de tipo real (en lugar de enfocar la funcionalidad principal del tipo dentro de la definición de tipo).
Tomemos el ejemplo de LINQ: al proporcionar métodos de extensión a IEnumerable
, podría apuntar a un gran número de tipos ya publicados (y un gran número de tipos que pueden escribirse en el futuro); ha separado la preocupación ortogonal, como consultar el tipo del tipo real.
Artículo # 3 en la lista es totalmente erróneo. Describe completamente la mecánica de los métodos de extensión como se describe en su 'alternativa'. Además, ¿a qué te refieres con "consultar el tipo del tipo real"? –
@ A.R., Quizás necesites explicar un poco lo que está * mal * en el n. ° 3. Un buen ejemplo para el n. ° 3 es 'IEnumerable' - si la interfaz no puede ser objetivo por métodos de extensiones, entonces somebody tendría que escribir la implementación para todos esos métodos en tipos específicos (o su tipo de base común). –
VinayC
@ A.R.Además, utilicé el término "preocupación ortogonal, como consultar el tipo del tipo real" en el contexto de "IEnumerable", simplemente significa que diferentes colecciones como diccionario, lista, cola, conjunto, etc. tiene que proporcionar implementación para varios métodos de consulta (unión, recuento, primero, último, etc.). Esta lógica realmente no es la preocupación central para esas clases. – VinayC