2010-02-15 15 views

Respuesta

40

declarar una clase de documentos estáticos su intención para que la clase sea una colección de funcionalidad estática, y cualquier adición de los miembros de instancia obtendrá un error de compilación.

Una clase no estática con miembros estáticos generalmente indica que la clase está diseñada para ser instanciada en algún momento. Los métodos estáticos de estas clases suelen hacer una de dos cosas:

  1. proporcionar un método de fábrica para crear una instancia de ese tipo;
  2. Proporcionan funcionalidad de ayuda que no requiere una instancia del tipo;

Además, como se mencionó anteriormente, los métodos de extensión solo se pueden declarar en una clase estática.

18

Asumo que se les preguntó por las diferencias?

Un método estático en una clase estática se puede utilizar para definir un método de extensión. Un método estático en una clase no estática no puede.

+0

Esa es una respuesta amplia que solo es relevante para C#. –

+7

@Nathan la pregunta menciona específicamente C# así síp – JaredPar

15

En términos de rendimiento y uso de memoria; precisamente nada. Tener una clase estática significa que saber no hay instancias, pero en 1.1 tiene un constructor privado suficiente. ¡Usa una clase estática si simplemente no tiene sentido tener una instancia! (clases de servicios públicos, etc.)

5

Cuando se ofrecen funciones de utilidad y de todos sus métodos son estáticos, le recomiendo que utilice métodos estáticos en una clase estática.

Cuando desee proporcionar métodos de utilidad que solo se ocupen de su instancia, le recomiendo que use métodos estáticos en una clase no estática. Por ejemplo:

var myClass = MyClass.Create(); 
var myClass = MyClass.Parse("serialized.MyClass"); 
-1

Una diferencia importante me enfrentaba a la hora de decidir si ir con la clase normal con todos los métodos estáticos o, utilice una clase estática, es que una clase normal, apoya la implementación de la interfaz, donde la clase estática como no lo hace. Utilizo la clase estática solo cuando estoy seguro de que será una colección de funciones estáticas (generalmente funciones auxiliares) y nunca estará en la secuencia principal del programa. Promuevo la programación de interfaces, para inyecciones de dependencia, pruebas unitarias, etc. Por lo tanto, para el flujo principal del programa, uso la clase normal con métodos estáticos.

Cuestiones relacionadas