Obtener la instancia de un objeto a partir de su nombre

22/02/2006 - 18:06 por Cesc | Informe spam
Tengo una serie de objetos en un módulo público y cada uno con un nombre
diferente. Necesito acceder al objeto correspondiente a partir de una cadena
de texto que representa su nombre.

Public Instancia1 as New Class1
Public Instancia2 as New Class2
.
Dim Objeto as Class1
Objeto = ¿ObtenerInstancia?("Instancia1")

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
22/02/2006 - 18:17 | Informe spam
Hola Cesc,

este es mi ejemplo:

Module1.vb
Module Module1
Public Instancia1 As New Class1
Public Instancia2 As New Class2
End Module

Class1.vb
Public Class Class1
Public Function Suma(ByVal Val1 As Integer, ByVal Val2 As Integer) As
Integer
Return Val1 + Val2
End Function
End Class

Class2.vb
Public Class Class2
Public Function Suma(ByVal Val1 As Integer, ByVal Val2 As Integer) As
Integer
Return Val1 + Val2
End Function
End Class

Form1.vb
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim Objeto As Class1
Objeto = Instancia1
MessageBox.Show(Objeto.Suma(2, 3))
End Sub
End Class


Espero que sea esto lo que preguntas.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Cesc" wrote:

Mostrar la cita
#2 Cesc
22/02/2006 - 19:19 | Informe spam
Hola Jorge

Creo que no me he explicado bien:
En tu ejemplo has obtenido el objeto directament cogiendo la instancia
'Instancia1'
Yo me refiero a que no se sabe el nombre de la instancia en tiempo de
diseño, si no en tiempo de ejecución.

por ejemplo:

Dim NombreInstancia as String
Dim Objeto as Object
NombreInstancia = ""
Objeto = ¿ObtenerInstancia?(NombreInstancia)

Es decir, acceder a un objeto en función de una cadena que representa su
nombre y desconozco hasta la ejecución.

Gracias



"Jorge Serrano [MVP VB]" wrote:

Mostrar la cita
#3 Jesús López
22/02/2006 - 20:12 | Informe spam
Podrías usar un HashTable. Según vas creando los objetos los vas metiendo en
el HashTable y luego los recuperas por su nombre. Por ejemplo:

Dim Table As New HashTable()

Dim Instancia1 As New Clase1()
Table.Add("Instancia1", Instancia1)

Dim Instancia2 As New Clase1()
Table.Add("Instancia2", Instancia2)


...

Dim NombreInstancia As String = ObtenerNombreInstancia()

Dim Instancia As Clase1 = CType(Table("NombreInstancia"), Clase1)

Saludos:

Jesús López
MVP


"Cesc" escribió en el mensaje
news:
Mostrar la cita
#4 Cesc
23/02/2006 - 19:46 | Informe spam
Hola Jesús

Esto lo hacia antes con la versión VB6.0
Pero yo pensaba que con la reflexión de VB2005 podría acceder a la
estructura de la información, y así es, pero no a las instancias creadas.

Existe el objeto Activator que permite crear instancias nuevas a partir del
nombre de una clase, pero curiosamente no lo que yo necesito.


Gracias de todos modos



"Jesús López" wrote:

Mostrar la cita
#5 Ernesto Díaz
23/02/2006 - 19:46 | Informe spam
Hola, oye pudiste crear la clase con el objeto activator??? por que yo tengo
esa necesidad y todo mundo me comenta que con el activator y con getType
pero no he podido resolverlo.

Saludos

Ernesto Díaz

"Cesc" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida