• Lunes 18 de Noviembre de 2024, 01:18

Autor Tema:  Llamar a un objeto usando el nombre  (Leído 3118 veces)

cls71

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Llamar a un objeto usando el nombre
« en: Martes 26 de Octubre de 2010, 08:25 »
0
Hola,

tengo varios objetos nombrados de forma secuencial que pertenecen a una clase clObjeto.

Código: C#
  1. private clObjeto objeto1, objeto2, objeto3;
  2. objeto1 = new clObjeto();
  3. objeto2 = new clObjeto();
  4. objeto3 = new clObjeto();
  5.  

No están metidos en una colección ni array.

Me gustaría usar una variable de referencia para poder apuntar a esos objetos usando su nombre.

Al estilo de algo como:

Código: C#
  1. private clObjeto variableRef;
  2. variableRef = "nombre del objeto" + n; // donde n sería el sufijo numérico
  3.  

es decir, usaría la cadena alfanumérica del nombre del objeto para que la variable variableRef quedara apuntando al objeto.

¿Sabéis si esto es posible en C# ?
Sé que se puede hacer en otros lenguajes como ABAP IV, incluso javascript.

Podría resolverlo usando un array o una lista pero me gustaría hacerlo con variables sueltas si fuera posible.

Muchas gracias.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Llamar a un objeto usando el nombre
« Respuesta #1 en: Martes 26 de Octubre de 2010, 12:02 »
0
En teoría si diseñas bien tu aplicación no tienes por qué necesitar hacer eso. Así mismo, si te ves en la necesidad de hacerlo, es que el diseño está mal.

Saludos

cls71

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Llamar a un objeto usando el nombre
« Respuesta #2 en: Martes 26 de Octubre de 2010, 18:05 »
0
Gracias m0skit0, pero la pregunta no era sobre el diseño, sino sobre una funcionalidad concreta que sí tienen otros lenguajes.

sabes si puede hacerse ? y en tal caso cómo se haría ?

S2

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Llamar a un objeto usando el nombre
« Respuesta #3 en: Martes 26 de Octubre de 2010, 18:11 »
0
Hasta donde yo sé, sólo se puede hacer con métodos, no con objetos, porque para eso tienes los vectores (arrays), que de hecho es una muchísimo mejor solución (y muchísimo más rápida).

Por cierto, ¿puedes ponerme algún ejemplo de otro lenguaje que permita hacer esto que dices?

cls71

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Llamar a un objeto usando el nombre
« Respuesta #4 en: Martes 26 de Octubre de 2010, 18:31 »
0
Como comenté en el primer post lo podía resolver con arrays, en concreto con listas tipadas. Pero me vino a la cabeza la duda de si podría apuntar al objeto partiendo de su nombre.
En javascript se puede con la función eval (lo digo con la boca pequeña porque hace años que no lo toco).
Y en ABAP IV se haría así (son variables en vez de objetos pero el ejemplo funciona igual):

Código: Text
  1. WRITE:/,/,/.
  2. * ------------------------ DYNAMIC ASSIGN ---------------------------- *
  3. * En este ejemplo la asignación se hace en función del nombre del campo.
  4. * Ejemplo de bucle para mostrar todas las variables con un prefijo común
  5. * El nombre de la variable se actualiza con el paso del bucle.
  6. * -------------------------------------------------------------------- *
  7. DATA: A1(10) , A2(10) , A3(10).
  8. DATA NAME(10) TYPE C.
  9. A1 = 'aaaaaaaaaa'. A2 = 'bbbbbbbbbb'. A3 = 'cccccccccc'.
  10. NAME = 'A'.
  11. FIELD-SYMBOLS: <FS1>.
  12. DATA INDICE(1) TYPE C.
  13. DO 3 TIMES.
  14.   INDICE = SY-INDEX.
  15.   CONCATENATE 'A' INDICE INTO NAME.
  16.   WRITE:/ NAME. "Escribe el nombre de la variable
  17.   ASSIGN (NAME) TO <FS1>.
  18.   WRITE: <FS1>. "Escribe el contenido de la variable
  19. ENDDO.
  20.  
  21. WRITE:/,/,/.
  22.  

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Llamar a un objeto usando el nombre
« Respuesta #5 en: Martes 26 de Octubre de 2010, 19:11 »
0
Cierto, en Perl también existe eval, igual que en LISP. Como te digo, que yo sepa en C# sólo puedes hacer eso con métodos.

Saludos
« última modificación: Jueves 28 de Octubre de 2010, 09:18 por m0skit0 »

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Llamar a un objeto usando el nombre
« Respuesta #6 en: Miércoles 27 de Octubre de 2010, 18:17 »
0
Bueno, te comento, lo vi en un ejemplo hace mucho tiempo, nunca lo prové y no se si funcionará con cualquier objeto. En ese ejemplo funcionaba, bueno, el tipo usaba esto:

this.b3.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("b1"+p+".BackgroundImage")));

donde b3 y b1 són botones (hay mas en el ejemplo) y "p" es un número al azar. El tio lo que hacía era cambiar las imagenes de los botones al azar.
y el resources es:

System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));


Si funciona con cualquier tipo de objeto avisa. De todos modos como te comentó cls71 no le veo una proctica muy buena. Saludos

cls71

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Llamar a un objeto usando el nombre
« Respuesta #7 en: Miércoles 27 de Octubre de 2010, 23:15 »
0
gracias tannke, pero sólo sirve para referenciar recursos de la aplicación (imágenes, icones, ficheros, ...).

S2