English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Como su nombre indica, los métodos de extensión son métodos adicionales. Los métodos de extensión le permiten inyectar otros métodos sin modificar, derivar o recompilar la clase, estructura o interfaz original. Puede agregar métodos de extensión a sus propias clases personalizadas, clases de .NET Framework, clases de terceros o interfaces.
Los métodos de extensión son C# 3La nueva característica en .0, que permite expandir las funciones del código fuente sin modificarlo, a través del modo ADD File.
Requisitos para los métodos de extensión:
Los métodos de extensión deben estar incluidos en una clase marcada con static.
La implementación de la extensión debe ser en forma estática.
El primer parámetro del método de extensión tiene el prefijo this, lo que indica que se necesita un objeto de clase que se extiende, y a partir del segundo parámetro, se lista la lista de parámetros del método de extensión.
En el siguiente ejemplo, IsGreaterThan () es un método de extensión del tipo int, que devuelve true si el valor de la variable int es mayor que el parámetro entero proporcionado.
int i = 10; bool result = i.IsGreaterThan(100); //Devuelve FALSE
El método IsGreaterThan () no es un método del tipo de datos int (Int32 struct). Es un método de extensión escrito por el programador para el tipo de datos int. Al incluir el espacio de nombres que define la extensión IsGreaterThan (), el método de extensión IsGreaterThan () estará disponible en toda la aplicación.
Los métodos de extensión tienen un símbolo especial en Visual Studio IntelliSense, por lo que puede identificar fácilmente los métodos de clase y de extensión.
Ahora veamos cómo escribir métodos de extensión.
Los métodos de extensión son métodos estáticos especiales definidos en una clase estática. Para definir un método de extensión, primero, defina una clase estática.
Por ejemplo, en el siguiente ejemplo, creamos una clase IntExtensions en el espacio de nombres ExtensionMethods. La clase IntExtensions contendrá todos los métodos de extensión aplicables al tipo de datos int. (Puede usar cualquier nombre para el espacio de nombres y la clase.)
namespace ExtensionMethods { public static class IntExtensions { } }
Ahora, defina un método estático como método de extensión, donde el primer parámetro del método de extensión especifica el tipo al que se aplica la extensión. Usaremos este método de extensión en el tipo int. Por lo tanto, debe añadirsethis Modificador.
Por ejemplo, el método IsGreaterThan() opera sobre int, por lo tanto, el primer parámetro es this int i.
namespace ExtensionMethods { public static class IntExtensions { public static bool IsGreaterThan(this int i, int value) { return i > value; } } }
Ahora, puede incluir el espacio de nombres ExtensionMethods en cualquier lugar donde desee usar este método de extensión.
using ExtensionMethods; class Program { static void Main(string[] args) { int i = 10; bool result = i.IsGreaterThan(100); Console.WriteLine(result); } }
false
La única diferencia entre métodos estáticos regulares y métodos de extensión es que el primer parámetro del método de extensión especifica el tipo sobre el que se realizará la operación, seguido de this Palabras clave.
C# solo admite métodos de extensión, no admite propiedades de extensión, eventos de extensión, operadores de extensión, etc.
Los métodos de extensión (los métodos antes del primer parámetro son this) deben declararse en una clase estática no genérica, el método de extensión debe tener un parámetro y solo el primer parámetro debe usar el marcador this.
El compilador de C# requiere que se
Múltiples clases estáticas pueden definir métodos de extensión idénticos.
Al extender un tipo con un método de extensión, también se extiende el tipo derivado.
Se debe estar en una clase estática no anidada y no genérica (por lo tanto, debe ser un método estático)
Debe haber al menos un parámetro.
El primer parámetro debe tener el prefijo de la palabra clave this.
El primer parámetro no puede tener otros modificadores (como ref o out).
El tipo del primer parámetro no puede ser un tipo de puntero.
Los métodos de extensión son otros métodos personalizados que no se incluyen inicialmente en la clase.
Los métodos de extensión se pueden agregar a clases, estructuras o interfaces personalizadas, .NET Framework o de terceros.
El primer parámetro del método de extensión debe ser el tipo al que se aplica la extensión, seguido dethisPalabras clave.
A través del espacio de nombres que contiene métodos de extensión, los métodos de extensión se pueden usar en cualquier lugar de la aplicación.