Se explican las clases estáticas y los miembros de la clase estática en C #

La palabra clave estática en el lenguaje de programación C # le permite definir clases estáticas y miembros estáticos.

Una clase estática es similar a una clase abstracta y sellada. La diferencia entre una clase estática y una clase no estática es que una clase estática no puede ser instanciada o heredada y que todos los miembros de la clase son de naturaleza estática. Para declarar una clase como estática, debe marcarla con la palabra clave estática en la declaración de la clase. 

No hay comportamiento en una clase o miembro estático, por lo que tampoco tiene sentido permitir que se herede una clase estática. Una clase estática solo puede tener miembros estáticos; no puede declarar miembros de instancia (métodos, variables, propiedades, etc.) en una clase estática. Puede tener un constructor estático en una clase estática, pero no puede tener un constructor de instancia dentro de una clase estática.

Cuándo usar una clase estática en C #

¿Cuándo deberías ir a una clase estática? Por lo general, puede implementar clases de ayuda o de utilidad como clases estáticas, ya que no es necesario crear una instancia o heredarlas y, por lo general, contienen una colección de algunos métodos y propiedades reutilizables. La siguiente lista de código ilustra cómo se ve una clase estática en C #.

FileLogger de clase estática pública

    {

        Registro de vacío estático público (mensaje de cadena)

        {

            // Método para registrar datos en un archivo de texto

        }

    }

Cuándo usar métodos estáticos en C #

Los métodos estáticos son métodos que no necesitan una instancia de la clase para ser invocados; se pueden llamar en la propia clase. Tenga en cuenta que los métodos estáticos solo pueden acceder a miembros de la clase estática. Puede tener métodos estáticos dentro de una clase estática o una clase no estática. Además, puede tener un constructor estático en una clase estática o una clase no estática. Se utiliza un constructor estático para inicializar los miembros estáticos de una clase. El constructor estático de una clase se invoca la primera vez que se accede a un miembro estático de la clase.

¿Por qué deberíamos utilizar métodos estáticos? Son un poco más rápidos en ejecución que los métodos no estáticos, es decir, los métodos de instancia. La razón es que el tiempo de ejecución pasa el thispuntero como un parámetro implícito a los métodos no estáticos o de instancia. Tenga en cuenta que para un método no estático, el compilador emite la callvirtinstrucción incluso si el método no es virtual. Si hace que sus métodos sean estáticos, el compilador emite callsitios no virtuales , eliminando la verificación adicional de si la instancia es nula. Esto podría brindarle algunos beneficios de rendimiento.

Por lo tanto, si la aplicación que está creando es crítica para el rendimiento, puede valer la pena utilizar tipos y métodos estáticos en su código. Las ganancias de rendimiento pueden ser apreciables si su código realiza una gran cantidad de llamadas a tales tipos y miembros.

El siguiente fragmento de código ilustra cómo se ve un método estático.

Registro de vacío estático público (mensaje de cadena)

        {

             string filePath = @ "F: \ Log.txt";

            usando (StreamWriter streamWriter = new StreamWriter (filePath, true))

            {

                streamWriter.WriteLine (mensaje);

                streamWriter.Close ();

            }

        }

Cómo usar miembros estáticos de una clase en C #

El CLR divide la memoria del sistema en tres regiones distintas: la pila, el montón y el montón de alta frecuencia. Dado que se puede acceder directamente a los objetos estáticos sin crear instancias de la clase, deben existir en la memoria durante toda la vida útil de la aplicación; no necesitan ser recolectados como basura. Por lo tanto, los objetos estáticos se almacenan en el montón de alta frecuencia. Por lo general, tiene un montón de alta frecuencia para cada dominio de aplicación.

Echemos ahora un vistazo a los miembros estáticos de una clase. Nuevamente, un objeto estático es aquel que persiste en la memoria durante todo el tiempo que la aplicación está en ejecución. Ampliando el ejemplo de registro anterior, la siguiente lista de código ilustra cómo se vería una clase FileLogger con miembros estáticos.

FileLogger de clase estática pública

    {

        objeto privado de solo lectura estático lockObject = new object ();

        FilePath de cadena estática pública

        {

            obtener; conjunto;

        }

        Registro de vacío estático público (mensaje de cadena)

        {

            bloquear (lockObject)

            {

                if (! string.IsNullOrEmpty (FilePath))

                usando (StreamWriter streamWriter = new StreamWriter (FilePath, true))

                {

                    streamWriter.WriteLine (mensaje);

                    streamWriter.Close ();

                }

            }

        }

    }

Tenga en cuenta el uso de la propiedad estática denominada FilePath. Para garantizar la seguridad de los subprocesos, lockse ha utilizado la palabra clave. Se ha realizado una comprobación dentro del Log()método para verificar que el valor de la FilePathpropiedad no sea nulo ni esté vacío.

Recuerde, cuando la velocidad de la aplicación es esencial, puede resultar útil utilizar métodos estáticos. Puede usarlos tanto en clases estáticas como en clases no estáticas.