Aquí podría ser tu PUBLICIDAD


C # Métodos de extensión Pregunta de arquitectura

votos
4

Hace poco hice esta pregunta: Error del compilador que hace referencia al método de extensión C # personalizado

La respuesta de Marc Gravell fue perfecta y resolvió mi problema. Pero me dio algo en qué pensar ...

Si el método de extensión y se debe colocar en una clase estática y el método en sí mismo debe ser estático, ¿por qué no podemos crear un método de extensión estático?

Entiendo que el parámetro marcado como this se usará para permitir el acceso a una instancia del objeto que estamos extendiendo. Lo que no entiendo es por qué no se puede crear un método para que sea estático ... me parece que esta es una limitación sin sentido ...

Mi pregunta es: ¿por qué no podemos crear un método de extensión que funcione como un método estático?

Publicado el 12/03/2009 a las 15:27
fuente por usuario Sergio
En otros idiomas...        العربية       

4 respuestas

votos
7

Espero que la respuesta real sea simple: no hubo un buen caso de uso. Por ejemplo, la ventaja es que permite una API fluida sobre los tipos existentes (que no proporcionan la lógica), es decir,

var foo = data.Where(x=>x.IsActive).OrderBy(x=>x.Price).First();

que permite LINQ:

var foo = (from x in data
           where x.IsActive
           order by x.Price
           select x).First();

Con los métodos estáticos, esto simplemente no es un problema, por lo que no hay justificación; solo usa el método estático en el segundo tipo.

Tal como están las cosas, los métodos de extensión no están orientados a objetos correctamente : son un abuso pragmático para facilitar la vida a expensas de la pureza. No había ninguna razón para diluir los métodos estáticos de la misma manera.

Respondida el 12/03/2009 a las 03:33
fuente por usuario Marc Gravell


Aquí podría ser tu PUBLICIDAD


votos
3

Porque esa característica no existe en C #.

Como solución alternativa, los métodos estáticos se pueden implementar en otra clase y llamar a través de esa clase para proporcionar la funcionalidad adicional.

Por ejemplo, XNA tiene una clase MathHelper que idealmente habría sido extensiones estáticas para la clase Math .

La comunidad pregunta si creemos que es una buena idea para C # 4.0

Respondida el 12/03/2009 a las 03:32
fuente por usuario Ben S

votos
1

Mi idea sería la compatibilidad: si de repente creó todos los métodos de extensión de métodos estáticos con la necesidad de este operador, podría romper inadvertidamente el código que ahora está anulando un método normal con un método de extensión.

Este parámetro permite el control y, por lo tanto, no rompe la compatibilidad.

Solo una idea sin embargo.

Respondida el 12/03/2009 a las 03:45
fuente por usuario Robert MacLean

votos
0

En primer lugar, debería agregar otra sintaxis para indicar que desea extender los métodos estáticos del tipo existente. Al extender la sintaxis, realmente necesita una muy buena razón para hacerlo.

Imaginemos que tengo una clase llamada MyExts que me permite agregar métodos de extensión a MyClass. Por qué debería:

MyClass.DoSomethingExtra();

ser mejor que

MyExts.DoSomethingExtra();

?

Respondida el 12/03/2009 a las 03:34
fuente por usuario AnthonyWJones