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:

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")

Respuesta Responder a este mensaje
#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:

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:

> 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")
>
Respuesta Responder a este mensaje
#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:
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:

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:

> 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")
>
Respuesta Responder a este mensaje
#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:

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:
> 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:
>
>> 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:
>>
>> > 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")
>> >



Respuesta Responder a este mensaje
#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:
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:

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:
> 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:
>
>> 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:
>>
>> > 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")
>> >



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida