Los métodos estáticos son mucho más rápidos y utilizan mucha menos memoria. Existe la idea errónea de que es un poco más rápido. Es un poco más rápido siempre y cuando no lo pongas en los bucles. Por cierto, algunos bucles parecen pequeños, pero realmente no lo son porque la llamada al método que contiene el bucle también es otro bucle. Puede ver la diferencia en el código que realiza funciones de representación. Mucho menos memoria es desafortunadamente cierta en muchos casos. Una instancia permite compartir fácilmente la información con métodos hermanos. Un método estático le pedirá la información cuando la necesite.
Pero al igual que en la conducción de automóviles, la velocidad aporta responsabilidad. Los métodos estáticos generalmente tienen más parámetros que su contraparte de instancia. Debido a que una instancia se ocuparía de almacenar en caché las variables compartidas, sus métodos de instancia se verán más bonitos.
ShapeUtils.DrawCircle(stroke, pen, origin, radius);
ShapeUtils.DrawSquare(stroke, pen, x, y, width, length);
VS
ShapeUtils utils = new ShapeUtils(stroke,pen);
util.DrawCircle(origin,radius);
util.DrawSquare(x,y,width,length);
En este caso, siempre que las variables de instancia son utilizados por todos los métodos de la mayoría de las veces, los métodos de instancia son bastante pena. Las instancias NO SON SOBRE EL ESTADO, se trata de COMPARTIR aunque el ESTADO COMÚN es una forma natural de COMPARTIR, NO SON LAS MISMAS. La regla general es la siguiente: si el método está estrechamente relacionado con otros métodos, se aman tanto que cuando se llama a uno se necesita llamar al otro y probablemente comparten la misma taza de agua. -, debe hacerse instancia. Traducir métodos estáticos en métodos de instancia no es tan difícil. Solo necesita tomar los parámetros compartidos y ponerlos como variables de instancia. A la inversa, es más difícil.
O puede hacer una clase de proxy que puenteará los métodos estáticos. Si bien puede parecer más ineficiente en teoría, la práctica cuenta una historia diferente. Esto se debe a que siempre que necesite llamar a DrawSquare una vez (o en un bucle), irá directamente al método estático. Pero cada vez que lo vayas a usar una y otra vez junto con DrawCircle, vas a usar el proxy de instancia. Un ejemplo son las clases System.IO FileInfo (instancia) vs File (estática).
Los métodos estáticos son verificados. De hecho, es más comprobable que una vez. El método GetSum (x, y) sería muy comprobable no solo con la prueba unitaria, sino también con la prueba de carga, la prueba integrada y la prueba de uso. Los métodos de instancia son buenos para las pruebas de unidades, pero son horribles para todas las demás pruebas (lo cual es más importante que las pruebas de unidades por cierto) y es por eso que tenemos tantos errores en estos días. Lo que hace que TODOS los métodos no sean comprobables son parámetros que no tienen sentido como (Sender s, EventArgs e) o estado global como DateTime.Now. De hecho, los métodos estáticos son tan buenos para probar que ves menos errores en el código C de una nueva distribución Linux que tu programador OO promedio (está lleno de s *** lo sé).
creo que esto se debe migrar a CS.SE –