clases estáticas pueden ser útiles en ciertas situaciones, pero hay un potencial de abuso y/o abusar de ellos, como la mayoría de las características del lenguaje.
Como ya mencionó Dylan Smith, el caso más obvio para usar una clase estática es si tiene una clase con solo métodos estáticos. No tiene sentido permitirles a los desarrolladores crear una instancia de dicha clase.
La advertencia es que una sobreabundancia de métodos estáticos puede indicar un defecto en su estrategia de diseño. Me parece que cuando está creando una función estática, es bueno preguntarse: ¿sería más adecuado como a) un método de instancia o ob) un método de extensión para una interfaz? La idea aquí es que los comportamientos de los objetos generalmente están asociados con el estado del objeto, lo que significa que el comportamiento debe pertenecer al objeto. Al usar una función estática, implica que el comportamiento no debe pertenecer a ningún objeto en particular.
Los diseños polimórficos y de interfaz se ven obstaculizados por el uso excesivo de funciones estáticas: no se pueden anular en clases derivadas ni se pueden unir a una interfaz.Por lo general, es mejor tener sus funciones de "ayuda" vinculadas a una interfaz a través de un método de extensión para que todas las instancias de la interfaz tengan acceso a esa funcionalidad compartida de "ayuda".
Una situación en la que las funciones estáticas son definitivamente útiles, en mi opinión, es crear un método .Create() o .New() para implementar lógica para la creación de objetos, por ejemplo cuando se quiere utilizar el objeto creado
public class Foo
{
public static Foo New(string fooString)
{
ProxyGenerator generator = new ProxyGenerator();
return (Foo)generator.CreateClassProxy
(typeof(Foo), new object[] { fooString }, new Interceptor());
}
Esto se puede utilizar con un marco proxy (como el castillo de proxy dinámico) en la que desea interceptar/inyectar funcionalidad en un objeto, en base a digamos, ciertos atributos asignados a sus métodos. La idea general es que necesita un constructor especial porque técnicamente está creando una copia de la instancia original con una funcionalidad adicional especial.
clases/métodos estáticos son por ejemplo útiles para implementar el patrón Singleton y el patrón Factory ... – Yahia
@Yahia: patrón Singleton con clases estáticas? [No lo creo.] (Http://stackoverflow.com/questions/3565482/can-singleton-class-be-static/3565496#3565496) – BoltClock
@BoltClock SI lees cuidadosamente, escribí "clases estáticas/métodos "y estoy bastante seguro de que los métodos estáticos son útiles al implementar un patrón Singleton ... – Yahia