miércoles, 16 de octubre de 2013

Clases Estáticas en C#

Tabla de Contenido

0. Introducción
1. Clases Estáticas en C#
2. Clases Estáticas en .NET Framework
3. Consideraciones Finales

4. Conclusiones
5. Glosario
6. Enlaces & Literatura

0. Introducción

En el artículo anterior hablamos acerca de los constructores estáticos, éstos son parte inherente de las clases estáticas. Entonces resulta necesario e importante hablar también de este tipo de dato que reúne funcionalidad y datos comunes y útiles para otras aplicaciones cliente. Veremos que a diferencia de las clases común y corrientes, las clases estáticas no requieren instanciación de objetos; se nombraran algunos ejemplos de estos tipos que residen el librería de clases de .NET Framework. Además, mostraré cómo crear una clase estática y miembros de la misma naturaleza; inclusive presentaré otros ejemplos que hacen uso de las clases estáticas System.Console y System.Math.

1. Clases Estáticas en C#

Podemos pensar en una clase estática como cualquier otra clase, pero con miembros (métodos, campos, constructores, etc.) de naturaleza estática, y por supuesto, con el modificador static [2] en su declaración. Véamoslo con un ejemplo:

En la línea 1 se declara la clase Utilidades con los modificadores de acceso y comportamiento public y static, respectivamente. Adicionalmente, el campo Errores, y los métodos EmailValido, y CalcularHash, que deben ser declarados como estáticos a través del mismo modificador. En caso de no ser así el compilador generará el error:

error CS0708: `Utilidades.CalcularHash(string)': cannot declare instance members in a static class

Este error se generaría si el método CalcularHash no tuviera especificado el modificador static; tal como se muestra en este fragmento:

public string CalcularHash (string file) { ... }

Es importante agregar que las regiones de código cliente no pueden instanciar tipos de clases estáticas. Si se va en contra de esta regla del compilador se experimentará el error a partir de la sentencia siguiente:

Utilidades u = new Utilidades ();

error CS0723: `u': cannot declare variables of static types
error CS0712: Cannot create an instance of the static class `Utilidades'

La invocación de los miembros estáticos de una clase se realiza de la siguiente manera:

Utilidades.CalcularHash ("X:\autorun.inf");
Utilidades.EmailValido ("valentina@outlook.com");

En general:

NombreclaseEstatica.CampoEstatico ();
NombreClaseEstatica.MetodoEstatico ();

2. Clases Estáticas en .NET Framework

A continuación hablaré de dos de las clases estáticas de .NET Framework: Console (namespace System) y Math (namespace System) más comunes.

2.1 Console

La clase Console (q-name System.Console) [3] contiene, en esencia, miembros estáticos para capturar (input) y presentar (output) texto desde la entradada estándar (teclado), y en la salida estándar (pantalla). (Éstos dos últimos componentes conforman lo que se conoce como consola, de ahí que la clase sea llamada así en inglés).

La sintaxis de claración en C# de esta clase es:

public static class Console

Veamos un ejemplo donde se utilizan varios de los miembros estáticos de esta clase:

Archivo C# PruebaConsole.cs [enlace alternativo]:

Miembros a resaltar:
  • Write [4]
  • ReadLine [5]
  • WriteLine [6]

2.2 Math

La clase Math (q-name System.Math) [7] es interesante por poseer un ingente cantidad de métodos y constantes útiles para operaciones aritméticas, algebraicas, trigonométricas, entre muchas más.

La sintaxis de declaración de esta clase en C#:

public static class Math

Veamos un ejemplo que demuestra su uso:

Archivo C# PruebaMath.cs:
La demostración consiste en el uso de dos miembros estáticos que obtienen el menor (Math.Min [8]) y el mayor (Math.Max [9]) de tres números enteros.

► Prueba de ejecución.

[Nota: Obsérvese que en ambos ejemplos no se utilizó el nombre completamente calificado de las clases debido a que en la líneas 1 se hizo la importación del namespace System.]

3. Consideraciones Finales

Algunos puntos a tener en cuenta (extraídos desde [10]):
  • Una clase estática sólo puede contener miembros estáticos.
  • No se puede crear instancias.
  • Una clase estática puede contener el modificador de herencia sealed [11] (la clase no se puede heredar).
  • No puede contener constructores de instancia (ni predeterminado ni especializado(s)).
  • Sólo puede contener constructores estáticos y privados (ver artículo Constructores Estáticos en C# [12]).

4. Conclusiones

Este artículo ha sido interesante porque hemos aprendido acerca del concepto de clases estáticas: cómo declararlas, uso de miembros estáticos. Se introdujo ejemplos de uso de clases estáticas (Console y Math) .NET Framework que contienen métodos de igual naturaleza, y que no requieren crear referencias a objetos para ser usadas. Al final se presentaron unas consideraciones importantes a tener en cuenta a la hora de crear o usar clases estáticas y sus respectivos miembros.

5. Glosario

  • Clase estática
  • Miembros de clase estáticos

6. Enlaces & Literatura

[1]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[2]: static (C# Reference) - http://msdn.microsoft.com/en-us/library/98f28cdx(v=vs.90).aspx
[3]: Console Class (System) - http://msdn.microsoft.com/en-us/library/system.console.aspx
[4]: Console.Write Method (System) - http://msdn.microsoft.com/en-us/library/system.console.write.aspx
[5]: Console.ReadLine Method (System) - http://msdn.microsoft.com/en-us/library/system.console.readline.aspx
[6]: Console.WriteLine Method (System) - http://msdn.microsoft.com/en-us/library/system.console.writeline.aspx
[7]: Math Class (System) - http://msdn.microsoft.com/en-us/library/system.math.aspx
[8]: Math.Min Method (System) - http://msdn.microsoft.com/en-us/library/system.math.min.aspx
[9]: Math.Max Method (System) - http://msdn.microsoft.com/en-us/library/system.math.max.aspx
[10]: Static Classes and Static Class Members (C# Programming Guide) - http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.90).aspx
[11]: sealed (C# Reference) - http://msdn.microsoft.com/en-us/library/88c54tsw.aspx
[12]: Constructores Estáticos en C# | Experiencias Construcción Software - http://ortizol.blogspot.com/2013/10/constructores-estaticos-en-c.html


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.