indizar una clase

03/04/2004 - 15:07 por opotonil | Informe spam
Hola.

Queria indizar una clase con dos propiedes privadas para
poder acceder a ellas de la siguiente manera:
clase[0].propiedad1;
clase[0].propiedad2;
Por ahora lo unico que he consegido es indizarla para que
me devuelva el objeto completo de la sigiente manera:
clase[0];

La clase es la siguiente:
public class Grupo
{
private ArrayList grupo = new ArrayList();
private int id;
private string nombre;

public Grupo this[int indice]
{
get
{
if(indice < grupo.Count
&& indice >= 0)
return grupo
[indice];
else
return null;
}
set
{
if(indice < grupo.Count
&& indice >= 0)
grupo[indice] =
value;
else if(indice ==
grupo.Count)
grupo.Add(value);
}
}

public int count
{
get
{
return grupo.Count;
}
}

public int _id
{
get
{
return id;
}
set
{
id = value;
}
}
public string _nombre
{
get
{
return nombre;
}
set
{
nombre = value;
}
}
}

de esta manera consigo que segun el indice me devuelva el
objeto en la posicion indice pero entero y lo que me
gustaria es que me devolviera una propiedad determinada
del objeto en la posicion indice. Es posible hacer esto ¿?

Gracias y salu2.
 

Leer las respuestas

#1 LC
05/04/2004 - 18:12 | Informe spam
Hola:

Creo que este problema se modela con 2 clase y no con una sola. Yo sacaría
el indexer de la clase Grupo y crearía la clase GrupoCollection. Más o menos
así:

//
public class Grupo
{
private int id;
private string nombre;

public Grupo(int id, string nombre){
this.id = id;
this.nombre = nombre;
}

public int Id{
get{return id;}
set{id = value;}
}

public string Nombre{
get{return nombre;}
set{nombre = value;}
}
}

//
public class GrupoCollection
{
private ArrayList grupo = new ArrayList();

public Grupo this[int indice]{
get{
if(indice < grupo.Count && indice >= 0) return
(Grupo)grupo[indice];
else return null;
}
set{
if(indice < grupo.Count && indice >= 0) grupo[indice] = value;
else if(indice == grupo.Count) grupo.Add(value);
}
}

public int Count {get{return grupo.Count;}}
}

//...y ahora es posible la sintaxis que quieres
GrupoCollection grupos = new GrupoCollection();
Grupos[0] = new Grupo(1, "nombre")
grupos[0].Id;
grupos[0].Nombre;

Saludos,
LC

"opotonil" wrote in message
news:17ce901c4197c$9f453ad0$
Hola.

Queria indizar una clase con dos propiedes privadas para
poder acceder a ellas de la siguiente manera:
clase[0].propiedad1;
clase[0].propiedad2;
Por ahora lo unico que he consegido es indizarla para que
me devuelva el objeto completo de la sigiente manera:
clase[0];

La clase es la siguiente:
public class Grupo
{
private ArrayList grupo = new ArrayList();
private int id;
private string nombre;

public Grupo this[int indice]
{
get
{
if(indice < grupo.Count
&& indice >= 0)
return grupo
[indice];
else
return null;
}
set
{
if(indice < grupo.Count
&& indice >= 0)
grupo[indice] value;
else if(indice =grupo.Count)
grupo.Add(value);
}
}

public int count
{
get
{
return grupo.Count;
}
}

public int _id
{
get
{
return id;
}
set
{
id = value;
}
}
public string _nombre
{
get
{
return nombre;
}
set
{
nombre = value;
}
}
}

de esta manera consigo que segun el indice me devuelva el
objeto en la posicion indice pero entero y lo que me
gustaria es que me devolviera una propiedad determinada
del objeto en la posicion indice. Es posible hacer esto ¿?

Gracias y salu2.

Preguntas similares