Como instanciar una clase.....

08/07/2004 - 23:12 por Eusebio | Informe spam
Hola todos,

estoy dando vueltas tratando de hacer lo siguiente:

Tengo 2 clases, y cada una de ella tiene exactamente los mismos métodos y
propiedades.

Lo que necesito es poder crear una instancia de una de las dos a partir del
contenido de una variable

dim miClase as object
if strInstanciar = "CrearClaseA" then
miClase = new ClaseA()
else
miClase = new ClaseB()
endif

el problema con el anterior código(no lo he probado) es que miClase queda
con el cuento de "Late Binding", y pues por comodidad a la hora de
programar es mejor con el intellisense.además porque esta clase es usada
practicamente para todo...

Sé que la clave está por el lado de la reflexion, pero es un tema que no he
logrado entender muy bien

ClaseA y ClaseB son dos clases que cada una ejecuta los mismos comandos una
contra un servidor sql server y la otra contra un servidor oracle...de tal
modo que la misma aplicación se pueda conectar a una u otra base de datos
sin modificar la interfaz de usuario

Gracias por adelantado...


Eusebio

Preguntas similare

Leer las respuestas

#1 Lázaro
09/07/2004 - 00:21 | Informe spam
1.- Crea un interface con los métodos y propiedades públicas que tienen tus
clases
Public Interface IMisclases
Sub MetodoUno(byval.)
Function MetodoDos(byval) as ..
Property Propiedad1 as ..
End Interface

2.- Luego obliga a que tus clases implementen ese interface

Public Class ClaseA
Implements IMisclases
End Class

3.- Sabes que en las clases tendrás que implementar todos los métodos y
propiedades a los que el interface obliga
4.- En el codigo que has enviado te quedaría así:
Dim miClase as IMisClases

If strInstanciar ="CrearClaseA" then
miClase = new ClaseA()
Else
miClase = new ClaseB()
End If

Usar reflection, es otra cosa distinta, se trata de poder invocar a métodos
y propiedades de una clase en ejecución sin conocerlos anteriormente...

Espero haber entendido bien tu duda.

Salu2


"Eusebio" wrote in message
news:
Hola todos,

estoy dando vueltas tratando de hacer lo siguiente:

Tengo 2 clases, y cada una de ella tiene exactamente los mismos métodos y
propiedades.

Lo que necesito es poder crear una instancia de una de las dos a partir


del
contenido de una variable

dim miClase as object
if strInstanciar = "CrearClaseA" then
miClase = new ClaseA()
else
miClase = new ClaseB()
endif

el problema con el anterior código(no lo he probado) es que miClase queda
con el cuento de "Late Binding", y pues por comodidad a la hora de
programar es mejor con el intellisense.además porque esta clase es


usada
practicamente para todo...

Sé que la clave está por el lado de la reflexion, pero es un tema que no


he
logrado entender muy bien

ClaseA y ClaseB son dos clases que cada una ejecuta los mismos comandos


una
contra un servidor sql server y la otra contra un servidor oracle...de tal
modo que la misma aplicación se pueda conectar a una u otra base de datos
sin modificar la interfaz de usuario

Gracias por adelantado...


Eusebio






Respuesta Responder a este mensaje
#2 Tristan
09/07/2004 - 10:06 | Informe spam
Además de la solución de Lázaro, puedes hacer uso de
herencia en lugar de interfaces:

MustInherit Class ClaseBase
public MustOverride Sub MetodoUno...

public Overridable function MetodoDos...
Método con código común a A y B
end function
...
end class

Class ClaseA
inherits ClaseBase
...
end Class

Class ClaseB
inherits ClaseBase
...
end Class

Y para instanciar:

dim miClase as ClaseBase
if strInstanciar = "CrearClaseA" then
miClase = new ClaseA()
else
miClase = new ClaseB()
endif
Respuesta Responder a este mensaje
#3 Eusebio
09/07/2004 - 16:46 | Informe spam
Listo muchachos, mil gracias.


Eusebio


"Eusebio" escribió en el mensaje
news:
Hola todos,

estoy dando vueltas tratando de hacer lo siguiente:

Tengo 2 clases, y cada una de ella tiene exactamente los mismos métodos y
propiedades.

Lo que necesito es poder crear una instancia de una de las dos a partir


del
contenido de una variable

dim miClase as object
if strInstanciar = "CrearClaseA" then
miClase = new ClaseA()
else
miClase = new ClaseB()
endif

el problema con el anterior código(no lo he probado) es que miClase queda
con el cuento de "Late Binding", y pues por comodidad a la hora de
programar es mejor con el intellisense.además porque esta clase es


usada
practicamente para todo...

Sé que la clave está por el lado de la reflexion, pero es un tema que no


he
logrado entender muy bien

ClaseA y ClaseB son dos clases que cada una ejecuta los mismos comandos


una
contra un servidor sql server y la otra contra un servidor oracle...de tal
modo que la misma aplicación se pueda conectar a una u otra base de datos
sin modificar la interfaz de usuario

Gracias por adelantado...


Eusebio






Respuesta Responder a este mensaje
#4 Tristan
10/07/2004 - 12:26 | Informe spam
Ahhh, no se por qué, me acordé de tu mensaje y se me ocurrió que tenía que
haber dicho una cosa. No se si leerás esto, pero me gustaría que a alguien
le pudiera servir para decidir.

La ventaja de usar herencia o interfaces, no es solo disponer de
intellisense. Además, hay una ENORME mejora de eficiencia y de
mantenibilidad.

Un método llamado mediante herencia o interfaces, se ejecuta MÁS DE MIL
veces más rápido que un código basado en Object y "Late binding" implícito.

Además el código es mucho más fácilmente mantenible, puesto que el
compilador detecta los errores existentes en la llamada.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#5 Heich
10/07/2004 - 22:23 | Informe spam
Hola Tristan, solo una pregunta respecto a tu comentario

Tengo algunos años programando con VB 6, en donde al usar Late Binding, se
hace mas rapida la ejecucion
de un programa, al no importar las TypeLib del componente instanciado al
entorno de la APP.
Evidentemente intellisense y control de errores en llamadas no existe, pero
en muchos casos
esto pasa a segundo termino cuando se compara las velocidades de proceso.

Mi pregunta es, entonces, cambia este concepto en .NET?

Saludos
Heich
heichito[arroba]hotmail[punto]com
Daria todo lo que se por saber la mitad de lo que ignoro.
-
NOTA: este mensaje se proporciona TAL CUAL.
Sin ningun derecho o garantia
Guia de Netiquette:
http://www.geocities.com/heich_prog...uette.html
-
"Tristan" escribió en el mensaje
news:O%
Ahhh, no se por qué, me acordé de tu mensaje y se me ocurrió que tenía que
haber dicho una cosa. No se si leerás esto, pero me gustaría que a alguien
le pudiera servir para decidir.

La ventaja de usar herencia o interfaces, no es solo disponer de
intellisense. Además, hay una ENORME mejora de eficiencia y de
mantenibilidad.

Un método llamado mediante herencia o interfaces, se ejecuta MÁS DE MIL
veces más rápido que un código basado en Object y "Late binding"


implícito.

Además el código es mucho más fácilmente mantenible, puesto que el
compilador detecta los errores existentes en la llamada.

Juan Carlos Badiola
MVP - C#


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida