No, no se aplican a todos los idiomas. Son una característica específica del lenguaje, ofrecida por C# y Visual Basic (otros lenguajes pueden haberlos adoptado desde, no lo sé).
El objetivo de ellos es proporcionar una sintaxis conveniente para llamar a métodos de utilidad en una clase o interfaz. En C# 2, un método de utilidad sería llamado a través de una clase estática, pasando el argumento de la forma habitual:
IEnumerable<string> someStrings;
int count = EnumerableHelpers.Count(someStrings);
Con los métodos de extensión, esto se puede escribir cómodamente usando algo que se parece a la sintaxis normal de método de la barra:
int count = someStrings.Count();
aunque Count() no es un miembro de la interfaz IEnumerable<string>
. Por lo tanto, los métodos de extensión le permiten aparecer a agregar miembros a clases o interfaces que no controla.
Ver http://stackoverflow.com/questions/tagged/extension-methods+c%23 –