7. Utilización avanzada de clases- 7.1. La palabra static
Curso: Programación en C# (2015), por Nacho Cabanes
7. Utilización avanzada de clases
7.1. La palabra static
Desde un principio, nos hemos encontrado con que "Main" siempre iba acompañado de la palabra "static". Lo mismo ocurría con las funciones que creamos en el tema 5. En cambio, los métodos (funciones) que pertenecen a nuestros objetos no los estamos declarando como "static". Vamos a ver el motivo:
- La palabra "static" delante de un atributo (una variable) de una clase, indica que es una "variable de clase", es decir, que su valor es el mismo para todos los objetos de la clase. Por ejemplo, si hablamos de coches convencionales, podríamos suponer que el atributo "numeroDeRuedas" va a tener el valor 4 para cualquier objeto que pertenezca a esa clase (cualquier coche). Por eso, se podría declarar como "static". En el mundo real, esto es muy poco habitual, y por eso casi nunca usaremos atributos "static" (por ejemplo, no todos los coches que podamos encontrar tendrán 4 ruedas, aunque esa sea la cantidad más frecuente).
- De igual modo, si un método (una función) está precedido por la palabra "static", indica que es un "método de clase", es decir, un método que se podría usar sin necesidad de declarar ningún objeto de la clase. Por ejemplo, si queremos que se pueda usar la función "BorrarPantalla" de una clase "Hardware" sin necesidad de crear primero un objeto perteneciente a esa clase, lo podríamos conseguir así:
// Ejemplo_07_01a.cs // Métodos "static" // Introducción a C#, por Nacho Cabanes using System; public class Hardware { public static void BorrarPantalla() { for (byte i = 0; i < 25; i ++) Console.WriteLine(); } } public class Ejemplo_07_01a { public static void Main() { Console.WriteLine("Pulsa Intro para borrar"); Console.ReadLine(); Hardware.BorrarPantalla(); Console.WriteLine("Borrado!"); } }
Desde una función "static" no se puede llamar a otras funciones que no lo sean. Por eso, como nuestro "Main" debe ser static, deberemos siempre elegir entre:
- Que todas las demás funciones de nuestro fuente también estén declaradas como "static", por lo que podrán ser utilizadas directamente desde "Main" (como hicimos en el tema 5, cuando aún no conocíamos las "clases").
- Declarar un objeto de la clase correspondiente, y entonces sí podremos acceder a sus métodos desde "Main":
// Ejemplo_07_01b.cs // Alternativa a 07_01a, sin métodos "static" // Introducción a C#, por Nacho Cabanes using System; public class Hardware { public void BorrarPantalla() { for (byte i = 0; i < 25; i ++) Console.WriteLine(); } } public class Ejemplo_07_01b { public static void Main() { Console.WriteLine("Pulsa Intro para borrar"); Console.ReadLine(); Hardware miPantalla = new Hardware(); miPantalla.BorrarPantalla(); Console.WriteLine("Borrado!"); } }
Ejercicios propuestos:
Ejercicio propuesto 7.1.1: Amplía el ejemplo 07_01a con un función "static" llamada "EscribirCentrado", que escriba centrado horizontalmente el texto que se le indique como parámetro.
Ejercicio propuesto 7.1.2: Amplía el ejemplo 07_01b con un función llamada "EscribirCentrado", que escriba centrado horizontalmente el texto que se le indique como parámetro. Al contrario que en el ejercicio 7.1.1, esta versión no será "static".
Ejercicio propuesto 7.1.3: Crea una nueva versión del ejercicio 5.2.3 (base de datos de ficheros, descompuesta en funciones), en la que los métodos y variables no sean "static".
Actualizado el: 29-01-2015 23:22