Yo diría que un pro es que borra las líneas entre lo que está en el marco y lo que no: puede usar su propio código tan naturalmente como código de marco, operando en tipos de marcos.
Los métodos de extensión no se deben usar arbitrariamente, por supuesto, no es como todos los métodos estáticos deben convertirse en métodos de extensión.
Intento pensar en ello como si el método lógicamente funciona "en" su primer parámetro. ¿Tendría sentido como método de instancia si pudieras incluirlo como método de instancia?
Un "con" que puede no conocer: si el tipo extendido más tarde agrega un método de instancia del mismo nombre que es aplicable con los mismos parámetros, su código de llamada comenzará a llamar a ese método de instancia la próxima vez recompilar Por ejemplo, Stream
ganó CopyTo
en .NET 4 ... Anteriormente había escrito un método de extensión CopyTo
, que luego no se llamaría. No hay advertencia de que esto está ocurriendo, por lo que debe estar alerta.
Una advertencia: los métodos de extensión no han existido durante el tiempo suficiente para que las mejores prácticas se establezcan realmente. Debería sopesar todas las opiniones (incluso, o quizás especialmente, las mías) cuidadosamente.
posible duplicar [evaluar los costos/beneficios de usar métodos de extensión en C# => 3.0] (http: // stackoverflow.com/questions/1644743/evaluation-cost-benefits-of-using-extension-methods-in-c-3-0) –
Se publicó una pregunta similar aquí: http://stackoverflow.com/questions/487904/what- advantage-of-extension-methods-have-you-found Y aquí: http://stackoverflow.com/questions/1644743/evaluating-cost-benefits-of-using-extension-methods-in-c-3-0 – HABJAN