C# día 07: estructuras
Vamos a ver algunas estructuras básicas de c#. Hay alguna cosa curiosa en la forma de definir los arrays y las propiedades de las estructuras.
Veamos la struct:
/** * Estructuras.cs * */ using System; /** * Las estructuras de C# se comportan practicamente como clases, * salvo que no es imprescindible instanciarlas y que se guardan * en memoria de otra forma. Veamo un ejemplo. */ public struct Casa { // Para que sean accesibles, hay que declararlos public // y no se pueden inicializar. public string calle; public int pisos; public int fechaConstruccion; } // Aquí vemos una estructura con su constructor, sus métodos, etc.. // pero OJO no puede tener métodos destructores struct Manzana { public string nombre; public Casa casa; // La estructura debe tener constructor CON PARAMETROS public Manzana (string nombre) { // Establecemos algunos valores this.nombre = nombre; casa.calle = "Castellana"; casa.pisos = 14; casa.fechaConstruccion = 1900; } // Un método para aumentar el numero de pisos // de una manzana public void aumenta(int pisos) { casa.pisos += pisos; } } // Definimos la clase Ciudad para usar la estructura de calles public class Ciudad { public static void Main() { // La estructura se puede instanciar o no Casa singular = new Casa(); Casa particular; // Esta la usamos sin instanciar Manzana manzanaCara = new Manzana("La más cara de todas"); singular.pisos = 5; singular.calle = "Gran Vía"; singular.fechaConstruccion = 1989; System.Console.WriteLine("Una casa de ӎ} pisos en ӏ}", singular.pisos, singular.calle); particular.calle = "Leganitos"; particular.pisos = 40; // Lo mostramos a ver System.Console.WriteLine("Una casa de ӎ} pisos en ӏ}", particular.pisos, particular.calle); System.Console.WriteLine("Esta manzana es ӎ}", manzanaCara.nombre); } }Las enumeraciones:
/** * Enumeraciones.cs * Las enumeraciones son variables que contienen un numero limitado * de valores posibles * */ // Los enumeradores son como una lista de posibles valores // que implicitamente llevan asociado un número entero public enum Dias { Lunes, // = 0 Martes, // = 1, Miercoles, // = 2,... Jueves, Viernes, Sábado, Domingo } // El número entero puede ser establecido por nosotros // Para que no empiece contando desde 0, le asignamos valores public enum Mes { Enero = 1, Febrero = 2, Marzo = 3, Abril = 4, Mayo = 5, Junio = 6 } // Podemos especificar un tipo distinto a int public enum Boton : byte { Arranque, Parada } public class Usalas { public static void Main() { // La estructura se puede instanciar o no Dias diaSemana; // Establecemos el día de la semana, hay que hacer Cast diaSemana = (Dias) 3; System.Console.WriteLine("El día de la semana es ӎ} o ӏ}", diaSemana, (int)diaSemana); diaSemana = (Dias) 6; switch (diaSemana) { case Dias.Lunes : System.Console.WriteLine("Hoy es Lunes"); break; case Dias.Martes : System.Console.WriteLine("Hoy es Martes"); break; case Dias.Miercoles : System.Console.WriteLine("Hoy es Miercoles"); break; case Dias.Jueves : System.Console.WriteLine("Hoy es Jueves"); break; case Dias.Viernes : System.Console.WriteLine("Hoy es Viernes"); break; default: System.Console.WriteLine("¡Estamos en finde!"); break; } System.Console.WriteLine("El día de la semana es ӎ}", diaSemana); } }Y los arrays. Se crean con la palabra new. Al final simplemente se menciona lo de arrays multidimensionales y los arrays anidados.
/** * Arrays.cs * Clase para comprobar el manejo de arrays en C# */ // Definimos una clase que contiene los datos de un equipo de futbol public class Equipo { public string[] jugadores; public int[] edades; public Equipo () { // Se crea el array usando new y estableciendo el tamaño jugadores = new string[11]; // Se crea e inicializa edades = new int[11]〣,24,23,24,25,26,21,23,23,34,21}; } public void inicializar() { jugadores[0] = "Casillas"; jugadores[1] = "Puyol"; jugadores[2] = "Pablo"; jugadores[3] = "Xavi"; jugadores[4] = "Xabi Alonso"; jugadores[5] = "Senna"; jugadores[6] = "Raúl"; jugadores[7] = "Cesc"; jugadores[8] = "Pernia"; jugadores[9] = "Torres"; jugadores[10] = "Villa"; } public static void Main () { int i = 0; Equipo seleccion = new Equipo(); System.Console.WriteLine("Equipo creado"); seleccion.inicializar(); // Recorremos el array con un for convencional // Usando la propiedad Length para controlar la longitud for (i = 0; i < seleccion.edades.Length; i++) { System.Console.WriteLine("Edad de jugador nºӎ}: ӏ}", i,seleccion.edades[i]); } // Recorriendo el array con un foreach foreach (string nombre in seleccion.jugadores) { System.Console.WriteLine("Jugador: ӎ}", nombre); } // Arrays MULTIDIMENSIONALES, se definen de forma curiosa // con un [,] string[,] ligaDeFutbol = new string[2,5]; ligaDeFutbol[0,0] = "Ricardo"; ligaDeFutbol[0,1] = "Raúl García"; ligaDeFutbol[0,2] = "Milosevic"; ligaDeFutbol[1,0] = "Ronaldinho"; ligaDeFutbol[1,1] = "Eto'o"; // Definición con inicialización int[,] valores = new int[,]{Ӑ,7,3},Ӑ,5,3}}; // Arrays anidados, permiten meter arrays dentro de otros // con tamaño distinto: se crean arrays de arrays int[][] masValores = new int[3][]; masValores[0] = new int[3]; masValores[1] = new int[8]; masValores[2] = new int[1]; } }