Por lo que he leído sobre los métodos de extensión, se encontrará con problemas si la clase base decide agregar un método con el mismo nombre que su extensión. Para una clase específica, generalmente no es difícil elegir un nombre para evitar enfrentamientos, sin embargo, los métodos de extensión se pueden agregar a las interfaces, lo que agrega infinitamente más posibilidades de conflictos.¿Deben los métodos de extensión tener un prefijo?
En Objective-C (con su versión, categorías), este problema se evita al agregar un prefijo antes de cada método. Sé que podemos definir métodos de extensión en espacios de nombres para que podamos controlar si son importados o no, pero esto solo resuelve el problema de los choques entre los métodos de extensión, en lugar de los enfrentamientos entre un método de extensión y la clase base.
Actualización:
Nadie, en realidad menciona esto, pero los métodos de extensión aren't virtual. Eso significa que si puede i.myExtension() en una interfaz i, entonces siempre llamará al método de clases de interfaz, por lo que no se llamará al método de subclase (que podría tener un propósito diferente). Entonces, en general, usar métodos de extensión es bastante seguro.
+1 ... Creo que los métodos de extensión se abusan con demasiada frecuencia. – Josh