una parameter extensions extension extender create clase c# parameters this

parameter - extension methods c#



Uso de la palabra clave "this" en parámetros formales para métodos estáticos en C# (6)

He encontrado varias instancias de código C # como las siguientes:

public static int Foo(this MyClass arg)

No he podido encontrar una explicación de lo que significa this palabra clave en este caso. ¿Alguna idea?


"esto" extiende la siguiente clase en la lista de parámetros

Así que en la firma del método debajo de "this" se extiende "String". La línea se pasa a la función como un argumento normal al método. cadena estática pública [] SplitCsvLine (esta línea de cadena)

En el ejemplo anterior, "esta clase" extiende la clase "Cadena" incorporada.


Acabo de aprender esto el otro día: esta palabra clave define que el método tiene que ser una extensión de la clase que lo sigue. Entonces, para su ejemplo, MyClass tendrá un nuevo método de extensión llamado Foo (que no acepta ningún parámetro y devuelve un int; se puede usar como con cualquier otro método público).


Este es un método de extensión . Vea aquí para una explanation .

Los métodos de extensión permiten a los desarrolladores agregar nuevos métodos al contrato público de un tipo CLR existente, sin tener que subclasificarlo o recompilar el tipo original. Los métodos de extensión ayudan a combinar la flexibilidad de la "tipografía de pato" compatible con el popular en los lenguajes dinámicos de hoy en día con el rendimiento y la validación en tiempo de compilación de los lenguajes de tipo fuerte.

Los métodos de extensión permiten una variedad de escenarios útiles, y ayudan a hacer posible el marco de consulta LINQ realmente poderoso ....

significa que puedes llamar

MyClass myClass = new MyClass(); int i = myClass.Foo();

más bien que

MyClass myClass = new MyClass(); int i = Foo(myClass);

Esto permite la construcción de interfaces fluidas como se indica a continuación.



explanation lo explica muy bien.

Para mí, la respuesta a la pregunta está en la siguiente declaración en esa publicación:

Observe cómo el método estático anterior tiene una palabra clave "this" antes del primer argumento de parámetro de tipo string. Esto le dice al compilador que este Método de Extensión en particular debe agregarse a los objetos de tipo "cadena". Dentro de la implementación del método IsValidEmailAddress (), puedo acceder a todas las propiedades / métodos / eventos públicos de la instancia de cadena real en la que se está invocando el método, y devolver verdadero / falso dependiendo de si es un correo electrónico válido o no.


share
Intellisense muestra los métodos de extensión con una flecha azul (por ejemplo, delante de "Agregado <>"):

Tu necesitas un

using the.namespace.of.the.static.class.with.the.extension.methods;

para que los métodos de extensión aparezcan y estén disponibles, si están en un espacio de nombres diferente al código que los usa.