variable usar metodos metodo estaticos estatico cuando clases c# .net language-features

usar - static void main c#



Debería preferir los métodos estáticos en C# (6)

Gran pregunta

Creo que la respuesta depende del contexto de lo que hace su código y de cuánto está estático.

Mi código ha estado viendo menos casos estáticos desde que programo interfaces mucho ahora y marco algunos métodos como "virtual protegido" en lugar de "estático" para casos como el patrón de extracción y reemplazo de pruebas de unidad. Sin embargo, eso no quiere decir que no se puedan llamar métodos estáticos.

Después de haber pasado un poco de tiempo aprendiendo sobre programación funcional, es cada vez más natural para mí querer trabajar con métodos estáticos que no realizan ninguna mutación.

¿Hay alguna razón por la que deba frenar este instinto?


Hay muchas razones para frenar este instinto cuando escribes OOP.

Estados objeto y comportamientos;

La clase estática y el método necesitan parámetros, y debe estar seguro de qué parámetros pasarán a los métodos estáticos. Pero la clase se maneja sola si el método relacionado con el estado es.

Creo que solo esta razón es suficiente para frenar los modificadores estáticos.

Y por razones claras, debemos escuchar a la señora Liskov. here


La pregunta me parece un poco rara, porque los métodos estáticos y los métodos que no realizan mutaciones son dos clasificaciones ortogonales de los métodos. Puede tener métodos estáticos de mutación y métodos de instancia no mutantes.

Para mí, se ha vuelto cada vez más natural combinar la programación funcional y funcional; Me gustan los métodos de instancia que no realizan mutaciones. La programación funcional es más fácil de entender porque desalienta mutaciones complejas; La programación OO es más fácil de entender porque el código y los datos en los que opera están muy cerca. ¿Por qué elegir? Abrazar el poder de "y"; ¡Haz ambos!


No completamente. Me gustan mis métodos de extensión, y Linq, pero un lenguaje OO debería usarse en una forma OO. Además, todo es imperativo en la CPU, y para varias capas además de eso.


Por alguna razón, pienso en esta cita cuando leo tu pregunta:

Puedes escribir Fortran en cualquier idioma.

Si la intención de C # fuera puramente funcional, la static sería innecesaria porque todo sería estático por defecto. Si eres estricto con respecto a seguir las prácticas de POO y los principios de SOLID, tu código se vuelve efectivamente funcional (sé que hay una cita sobre este tema en alguna parte) para que termines obteniendo lo mejor de ambos mundos.

La razón por la que lo restringiría en un proyecto multiusuario sería que no es el C # típico (es realmente C # con esposas). Solo necesitas una persona para romper la regla y declarar una propiedad mutable estática y todo se va al infierno.


Puedes escribir programas de trabajo de esta manera, pero no es idiomático. Si quieres trabajar en un equipo, intentaría frenarlo. Si nadie más está leyendo tu código, vuelve loco.