2010-07-14 21 views
7

Tengo una pregunta general ... ¿cuándo debería usar clases estáticas o métodos estáticos? ... Conozco la idea de que se pueden invocar métodos estáticos sin instanciar ... ¿y las clases estáticas solo deberían usarse para métodos estáticos? ... pero ¿hay algún problema de rendimiento también con eso ... y cuándo deberían preferirse a los métodos y clases de la instancia? ... ¿Alguien podría mencionar brevemente cuándo debo optar por usarlos y cuándo debo evitarlos?Cuándo usar clases y métodos estáticos?

Respuesta

1

Hay es una entrada anterior aquí parece: When to use static classes in C#

Yo would t Las clases estáticas de Hink son para retener funciones o datos que desea llamar sin tener que crear un objeto para ello. Si no recuerdo mal, la instancia de un objeto lo coloca en la memoria. Y, por implicación, ¿una clase estática no objeto no entra en la memoria? Hace un tiempo desde que tomé mis clases teóricas; (Lo siento.

+0

Un constructor estático sólo se le llama una vez, y una clase estática permanece en la memoria para toda la vida del dominio de aplicación en el que reside el programa. - http://msdn.microsoft.com/en-us/library/79b3xss3.aspx –

0

Creo que una regla general podría ser que las funciones de utilidad deben ser estáticas. Un ejemplo típico sería cómo en cualquier lenguaje oop una clase Math contendría métodos estáticos como sqrt(), ya que realmente no es necesario tener algo así como un objeto Math separado.

En cuanto a las clases estáticas, debería pensar en las clases manteniendo una forma de estado, típicamente como información de sesión, que se necesita independientemente del ruta exacta recorrida a través de su aplicación, y de la que normalmente necesita exactamente una. (piense en su navegador, probablemente siempre manteniendo exactamente 1 cookie-jar como clase)

Las variables estáticas son las gemelas menos malvadas de las variables globales (mantienen su valor, pero con su alcance limitado a una función), que normalmente son útiles para mantener alguna forma de estado (p. almacenamiento en caché de datos) o enumerar cosas que deberían ser únicas pero cuya numeración no es muy importante fuera del alcance de su función o aplicación (por ejemplo, enumerar errores de depuración o creación de perfiles de sus propias funciones de depuración ("..") o de perfil())

Básicamente, solo usa cualquiera de ellos cuando estés seguro de que hacer las cosas de la manera correcta "OOP-like" llevaría a la creación de un monstruo.

0

Según tengo entendido, es cuando no tiene sentido crear un objeto de una clase para invocar una acción o esa clase es común dentro de la aplicación. Por ejemplo, en C#, la clase de consola está sellada (por lo que no puede crear un objeto y heredarlo, y realmente no tiene sentido hacerlo). Pero los profesionales te explicarán mejor, sin embargo.

4

Una cosa a tener en cuenta es las implicaciones de prueba de los métodos estáticos. Un método estático "sella" una gran cantidad de seams. Las costuras son donde puedes cambiar el comportamiento sin cambiar tu código de producción; los ejemplos son subclases o enlaces a una biblioteca de prueba. Dado que los métodos estáticos se resuelven en tiempo de compilación y no están vinculados dinámicamente, no puede lanzar un objeto de prueba y cambiar la forma en que se comporta un método estático. Probando esa clase va a ser un lastre.

Para cosas como las funciones matemáticas, puede estar bastante seguro de que un método estático estará bien, pero es casi seguro que no querría un método estático que se conecta a una base de datos. Piense en cómo probaría el código que usa un método estático que está pensando en hacer.

Aquí hay un buen enlace del blog de pruebas Google: Static Methods are Death to Testability

+0

Impresionante publicación - Estoy volviendo loca Miško Hevery. ¿Has visto sus Google Tech Talks? (Creo que fue la charla titulada "The Clean Code Talks - Unit Testing", aunque todas sus charlas valen la pena). Estas conversaciones desencadenaron un momento supernovas cognitivas para mí, fusionando IOC y TDD en una especie de gran arma épica. –

+0

"Un método estático" sella "muchas costuras". no es importante para los métodos de bajo nivel, pero importa para los métodos de nivel superior. – Raedwald

Cuestiones relacionadas