El uso de palabra “this” en los parámetros formales de los métodos estáticos en C #

StackOverflow https://stackoverflow.com/questions/846766

  •  21-08-2019
  •  | 
  •  

Pregunta

Me he encontrado con varios casos de código C # como el siguiente:

public static int Foo(this MyClass arg)

No he sido capaz de encontrar una explicación de lo que significa la this palabra clave en este caso. Cualquier ideas?

¿Fue útil?

Solución

Este es un método de extensión . Ver aquí para una explicación .

  

Los métodos de extensión permiten a los desarrolladores añadir nuevos métodos para el público   contrato de un tipo CLR existente, sin tener que subclase o   recompilar el tipo original. Métodos de extensión ayudar a mezclar el   flexibilidad de "duck typing" apoyo popular dentro de los lenguajes dinámicos   hoy con la validación del rendimiento y tiempo de compilación de   lenguajes de tipo fuerte.

     

Métodos de extensión permiten una variedad de escenarios útiles y ayudar a hacer   la posible realmente potente marco consulta LINQ ....

que significa que se puede llamar

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

en lugar de

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

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

Otros consejos

blog citado de Scott Gu lo explica muy bien.

Para mí, la respuesta a la pregunta es la siguiente declaración en ese puesto:

  

Tenga en cuenta cómo el método estático anterior tiene una   Palabra "this" antes de la primera   argumento de parámetros de tipo cadena.   Esto le dice al compilador que esta   en particular Método de extensión debe ser   añadido a objetos de tipo "cadena".   Dentro del IsValidEmailAddress ()   implementación del método a continuación, que pueda   acceder a todo el público   propiedades / métodos / acontecimientos de la   instancia cadena real que el método   que se llama en adelante, y el regreso   verdadero / falso dependiendo de si se trata de   un correo electrónico válido o no.

Además de la explicación de Preet Sangha:
IntelliSense muestra los métodos de extensión con una flecha azul (por ejemplo delante de "agregado <>"):

introducir descripción de la imagen aquí

Se necesita un

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

para los métodos de extensión que aparecen y que estén disponibles, si se encuentran en un espacio de nombres diferente que el código de usarlos.

métodos de extensión . Bienvenido a un nuevo mundo fluidez . :)

Me acabo de enterar de esto mismo, el otro día: la palabra clave this define que el método ha de ser una extensión de la clase que se procede. Así, por tu ejemplo, MiClase tendrá un nuevo método de extensión llamado Foo (que no acepta ningún parámetro y devuelve un entero, sino que puede ser utilizado como con cualquier otro método público).

"este" se extiende la clase siguiente en la lista de parámetros

Así que en la firma del método de abajo "esto" se extiende "Cadena". Línea se pasa a la función como un argumento normal al método. public static string [] SplitCsvLine (esta línea de cuerda)

En el ejemplo anterior "este" clase está extendiendo el en clase construido "String".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top