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];
}
}
pello.io