Método de extensión en C#

En C#, el concepto de método de extensión 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. Suponga 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 de concepto para agregar el nuevo método en la clase/estructura existente. Ahora crea una nueva clase que es estática y contiene los dos métodos que desea agregar en la clase existente, ahora vincule esta clase con la clase existente. Después de vincular, verá que la clase existente puede acceder a los dos nuevos métodos agregados. Como se muestra en el siguiente programa.

Ejemplo: Primero creamos una clase llamada Geek en el archivo Program1.cs . Contiene tres métodos que son M1() , M2() y M3() .

// 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 denominada NewMethodClass en el archivo Program2.cs . Contiene dos métodos que son M4() y M5() . Ahora queremos agregar estos métodos en la clase Geek , por lo que 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í, los parámetros de vinculación 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, 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, entonces el compilador dará un error. El parámetro de enlace se crea utilizando 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í, esta palabra clave se usa para vincular, Geek es el nombre de la clase en la que desea vincular y g es el nombre del parámetro.

  • Los métodos de extensión siempre se definen como un método estático, pero cuando están vinculados 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 la anulación de métodos .
  • También puede agregar nuevos métodos en la clase sellada utilizando también un concepto de método de extensión.
  • No se puede aplicar a campos, propiedades o eventos.
  • Debe definirse en la 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 puede 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 la 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 .

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *