Estructura anidada.

07/11/2005 - 05:38 por Daltonic | Informe spam
Muy buenas.
Pondré directamente un ejemplo, que creo será la forma más fácil de
explicarlo:

string planta1 = Aula.Clase["Aula 1"].planta;
int capacidad1 = Aula.Clase["Aula 1"].capacidad;
string planta2 = Aula.Clase["Laboratorio 1"].planta;
int capacidad2 = Aula.Clase["Laboratorio 1"].capacidad;

es exactamente lo mismo que:

string planta1 = Aula.Clase[0].planta;
int capacidad1 = Aula.Clase[0].capacidad;
string planta2 = Aula.Clase[1].planta;
int capacidad2 = Aula.Clase[1].capacidad;


¿Cómo se podría crear esa estructura de datos? A "Clase" se debe poder
acceder mediante un entero o un string.
 

Leer las respuestas

#1 JuanCri
07/11/2005 - 06:17 | Informe spam
Básicamente, necesitas definir dos accessor, uno con índice entero y
otro con índice string. ¿Ejemplos? A continuación... mira la clase
"Clase".

Atte,
Juan Cristóbal Olivares
www.juancri.com

==
using System;
using System.Collections;

class Clase
{
// Campos privados

private int capacidad;
private string nombre;
private string planta;



// Propiedades

public int Capacidad
{
get { return this.capacidad; }
}
public string Nombre
{
get { return this.nombre; }
}
public string Planta
{
get { return this.planta; }
}



// Constructor

public Clase (string pNombre, int pCapacidad, string pPlanta)
{
// Guardar
this.nombre = pNombre;
this.capacidad = pCapacidad;
this.planta = pPlanta;
}
}

class ListaClases : IEnumerable
{
// Campos privados

private ArrayList lista;



// This

public Clase this [int indice]
{
get { return this.lista[indice] as Clase; }
}
public Clase this [string indice]
{
get
{
// Buscar
foreach (Clase clase in this.lista)
if (clase.Nombre == indice)
return clase;

// Default
return null;
}
}



// Constructor

public ListaClases ()
{
// Iniciar array list
this.lista = new ArrayList ();
}



// Metodos

public void Agregar (Clase clase)
{
// Verificar
if (clase == null)
throw new ArgumentNullException ("clase");

// Agregar
this.lista.Add (clase);
}

public IEnumerator GetEnumerator ()
{
return this.lista.GetEnumerator ();
}
}

class Aula
{
// Campos privados

private ListaClases lista;



// Propiedades

public ListaClases Clase
{
get { return this.lista; }
}



// Constructor

public Aula (ListaClases pLista)
{
// Guardar
this.lista = pLista;
}
}

class Test
{
public static void Main ()
{
// Crear lista
Console.WriteLine ("Creando lista...");
ListaClases lista = new ListaClases ();

// Agregar
lista.Agregar (new Clase ("Aula 1", 100, "Planta de aula 1"));
lista.Agregar (new Clase ("Aula 2", 200, "Planta de aula 2"));

// Crear aula
Aula aula = new Aula (lista);



// Mostrar
Console.WriteLine ("Accediendo a traves de indice string:");
Console.WriteLine ("Aula.Clase[\"Aula 1\"].Planta: {0}",
aula.Clase["Aula 1"].Planta);
Console.WriteLine ("Aula.Clase[\"Aula 1\"].Capacidad: {0}",
aula.Clase["Aula 1"].Capacidad);
Console.WriteLine ("Aula.Clase[\"Aula 2\"].Planta: {0}",
aula.Clase["Aula 2"].Planta);
Console.WriteLine ("Aula.Clase[\"Aula 2\"].Capacidad: {0}",
aula.Clase["Aula 2"].Capacidad);

Console.WriteLine ("Accediendo a traves de indice entero:");
Console.WriteLine ("Aula.Clase[0].Planta: {0}",
aula.Clase[0].Planta);
Console.WriteLine ("Aula.Clase[0].Capacidad: {0}",
aula.Clase[0].Capacidad);
Console.WriteLine ("Aula.Clase[1].Planta: {0}",
aula.Clase[1].Planta);
Console.WriteLine ("Aula.Clase[1].Capacidad: {0}",
aula.Clase[1].Capacidad);

// Fin
Console.WriteLine ("Fin :)");
}
}

Preguntas similares