2010-02-09 12 views
8

Tengo dudas sobre la clase estática y los métodos estáticos. Desde MSDN entendí que "las clases estáticas y los miembros de la clase se usan para crear datos y funciones a los que se puede acceder sin crear una instancia de la clase".¿Por qué se usan clases estáticas?

Así que si no queremos asociar una clase más de una instancia, vamos a hacer lo más estático. ¿Es esa la única ventaja? ¿Alguien puede guiarme en qué escenario en tiempo real vamos para la clase estática?

algún tiempo en las clases (no estáticos) Estoy descubriendo métodos estáticos. ¿Qué ventaja/ventaja de rendimiento otorgan los métodos estáticos a los métodos de instancia en la práctica?

+0

preguntas relacionadas interesantes: http://stackoverflow.com/questions/169378/c-method-can-be-made-static-but-should-it http://stackoverflow.com/questions/731763/debería-c-métodos-que-puede-ser-estático-ser-estática http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c – Jla

Respuesta

19

Para las clases de utilidad son geniales. Como mencionaste, son similares al estado global. Entonces, para las clases que no tienen estado, para los beneficios de rendimiento, la clase debe ser estática.

Por otro lado, las clases estáticas son difíciles de probar (si contienen estado). El polimorfismo y otros conceptos de OO también se pierden.

Úselo con prudencia.

+0

debe tener en cuenta, la ganancia de rendimiento que mencioné es trivial. – Finglas

+0

+ por pérdida de herencia! –

+0

C# tiene un método que se oculta a través de la nueva palabra clave, que aunque no es lo mismo, he encontrado un uso para ella en mi trabajo de C#.Aún así, está sucio y es un TDDer, la estática es algo que evito a menos que caiga en el segmento de la clase de utilidad. – Finglas

6

Aplicar la palabra clave static a una clase es una convención de lenguaje C#, no significa nada especial para el CLR. Simplemente se asegura de que todos los miembros sean estáticos y de que no pueda crear accidentalmente una instancia de la clase con la nueva palabra clave .

Los méritos de los métodos estáticos se discuten en this thread.

+0

+1, buena respuesta – nawfal

2

OMI clases estáticas son la programación de procedimiento en el encubrimiento. No necesariamente es algo malo, pero no es muy OOPly. Tenga cuidado con el functional decomposition antipattern.

1

Las clases estáticas son excelentes para definir métodos estáticos. Este es el enfoque clásico de 'clase de utilidad'. Sin embargo, tenga mucho cuidado con el estado de almacenamiento (es decir, definir campos) en una clase estática. En nuestro mundo de subprocesos múltiples esto puede llevar a un comportamiento de programa impredecible a menos que sincronice el acceso a campos estáticos.

0

propiedades estáticas utilizan principalmente para introducir Contexto de la ejecución de código. Y puede encontrar la confirmación de eso en cada pieza de .NET stack.
ASP.NET - HttpContext.Current
Roscado - Thread.currentThread
WinForms - WindowsFormsSynchronizationContext.Current
WPF - despachador
etc
clase estática para mí es sólo contenedor de métodos de utilidad.

0

clases estáticas globaliza una variable particular que hace que sea más fácil de manejar durante el código. Por lo tanto, en el nivel básico, preferimos usar Clases estáticas.

Cuestiones relacionadas