C# día 05: clases!
Veamos como se definen las clases. La cosa no cambia salvo alguna cosa curiosa; si no se especifica otra cosa, los atributos y métodos NO son accesibles, vamos que NO son public por defecto.
Veamos la clase Punto, y luego una clase que le crea un instancia y lo usa.
using System; // Definimos la clase punto, // que se refiere a un punto en una coordenadas public class Punto { // ATENCION: SI NO SE ESPECIFICA NADA, // los atributos y metodos NO SON accesibles public int x; public int y; // Constructora: siempre con el mismo nombre que la clase public Punto () { // Aprovechamos para inicializar atributos this.x = 0; this.y = 0; } // Una funcion llamada posicion // Devuelve por consola la posicion actual de X public int posicionX () { return x; } // Una funcion llamada posicion // Devuelve por consola la posicion actual de Y public int posicionY () { return y; } // Una funcion llamada mueveX // Cambia la posicion de X public void mueveX (int cuanto) { this.x += cuanto; } // Una funcion llamada mueveY // Cambia la posicion de Y public void mueveY (int cuanto) { this.y += cuanto; } }Y esta es la clase que lo usa
/** UsaPunto.cs Una muestra de los UsaPunto de c# Para compilar con MS: csc UsaPunto.cs Punto.cs, ejecucion: UsaPunto.exe Para compilar con Mono: mcs UsaPunto.cs , ejecucion: mono UsaPunto.exe */ // Definicion de la clase UsaPunto // donde creamos una instancia de la clase punto y la usamos public class UsaPunto { // Directamente metemos la funcion principal // para probar el objeto punto public static void Main () { // Aqui creamos la instancia de Punto. Punto miPunto = new Punto(); System.Console.WriteLine("Ok, punto creado"); // Probamos algunas funciones... miPunto.mueveX(6); miPunto.mueveY(45); System.Console.Write("Posicion de X: {0}, ", miPunto.posicionX()); System.Console.WriteLine("posicion de Y: {0}", miPunto.posicionY()); } }También podemos definir una clase dentro de otra. Por ejemplo, la clase Circulo y su Color.
/** Circulo.cs Una muestra de los Circulo de c# Para compilar con MS: csc Circulo.cs, ejecucion: Circulo.exe Para compilar con Mono: mcs Circulo.cs , ejecucion: mono Circulo.exe */ // Una clase definida dentro de otra // El circulo y su clase color public class Circulo { int diametro; public Color miColor; // Clase Color public class Color { string color; public Color(string inicial) { this.color = inicial; } // Un método para cambiar el atributo color public void cambiaColor(string otro) { this.color = otro; } // Un método para que devuelva el color public string dameColor() { return this.color; } }// fin de clase color // Constructor de Circulo public Circulo (int diametroInicial, string colorInicial) { this.diametro = diametroInicial; this.miColor = new Color(colorInicial); } // Método que devuelve el diametro public int dameDiametro () { return this.diametro; } // Funcion o método principal para las pruebas public static void Main () { // Creamos una instancia Circulo circulo = new Circulo(66, "verde"); System.Console.WriteLine("Hemos creado un circulo"); System.Console.WriteLine("Su diametro es: {0}", circulo.dameDiametro()); // Vamos a cambiarle el color circulo.miColor.cambiaColor("negro"); System.Console.WriteLine("OK, color cambiado: {0}", circulo.miColor.dameColor()); } }