En C#, el método de extensión El concepto le permite agregar nuevos métodos en la clase existente o en la estructura sin modificar el código fuente del tipo original y no requiere ningún tipo de permiso especial del tipo original y no hay necesidad de volver a compilar el tipo original. . Se introduce en C# 3.0 .
Analicemos este concepto con la ayuda de un ejemplo. Supongamos que tiene una clase o estructura que contiene tres métodos y desea agregar dos nuevos métodos en esta clase o estructura, no tiene el código fuente de la clase/estructura o no tiene permisos de la clase/estructura, o la clase es una clase sellada, pero aún desea agregar nuevos métodos en ella, luego puede usar el método de extensión del concepto para agregar el nuevo método en la clase/estructura existente.
c número aleatorio
Ahora crea una nueva clase que es estática y contiene los dos métodos que desea agregar a la clase existente, ahora vincula esta clase con la clase existente. Después de la vinculación, verá que la clase existente puede acceder a los dos métodos recién agregados. Como se muestra en el siguiente programa.

Ejemplo:
Primero creamos una clase llamada Adicto en Programa1.cs archivo. Contiene tres métodos que son M1() , M2() , y M3() .
C#
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // Here Geek class contains three methods // Now we want to add two more new methods in it // Without re-compiling this class class Geek { // Method 1 public void M1() { Console.WriteLine("Method Name: M1"); } // Method 2 public void M2() { Console.WriteLine("Method Name: M2"); } // Method 3 public void M3() { Console.WriteLine("Method Name: M3"); } } }> Ahora creamos una clase estática llamada NewMethodClass en Programa2.cs archivo. Contiene dos métodos que son M4() y M5() . Ahora queremos agregar estos métodos en Adicto clase, entonces usamos el parámetro de enlace para vincular estos métodos con la clase Geek. Después de eso, creamos otro llamado GFG en el que la clase Geek accede a los cinco métodos.>
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // This class contains M4 and M5 method // Which we want to add in Geek class. // NewMethodClass is a static class static class NewMethodClass { // Method 4 public static void M4(this Geek g) { Console.WriteLine("Method Name: M4"); } // Method 5 public static void M5(this Geek g, string str) { Console.WriteLine(str); } } // Now we create a new class in which // Geek class access all the five methods public class GFG { // Main Method public static void Main(string[] args) { Geek g = new Geek(); g.M1(); g.M2(); g.M3(); g.M4(); g.M5("Method Name: M5"); } } }> Producción:
Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>
Puntos importantes:
- Aquí, Parámetros de enlace son aquellos parámetros que se utilizan para vincular el nuevo método con la clase o estructura existente. No toma ningún valor cuando llama al método de extensión porque se usan solo para vincular y no para ningún otro uso. En la lista de parámetros del método de extensión, el parámetro de enlace siempre está presente en el primer lugar. Si escribe el parámetro de enlace en el segundo, tercer o cualquier otro lugar en lugar del primero, el compilador dará un error. El parámetro de enlace se crea usando esta palabra clave seguida del nombre de la clase en la que desea agregar un nuevo método y el nombre del parámetro. Por ejemplo:
this Geek g>
Aquí, este la palabra clave se utiliza para vincular, Adicto es el nombre de la clase a la que desea vincularse, y gramo es el nombre del parámetro. - Los métodos de extensión siempre se definen como métodos estáticos, pero cuando se vinculan con cualquier clase o estructura, se convertirán en métodos no estáticos.
- Cuando se define un método de extensión con el mismo nombre y la firma del método existente, el compilador imprimirá el método existente, no el método de extensión. O en otras palabras, el método de extensión no admite anulación del método .
- También puede agregar nuevos métodos en el clase sellada también utilizando un concepto de método de extensión.
- No se puede aplicar a campos, propiedades , o eventos.
- Debe definirse en una clase estática de nivel superior.
- No se permiten múltiples parámetros de enlace, lo que significa que un método de extensión solo contiene un único parámetro de enlace. Pero puedes definir uno o más parámetros normales en el método de extensión.
Ventajas:
- La principal ventaja del método de extensión es agregar nuevos métodos en la clase existente sin usar herencia .
- Puede agregar nuevos métodos en la clase existente sin modificar el código fuente de la clase existente.
- También puede funcionar con clase sellada .