Retroceder   Foros del Web > Programación para sitios web > .NET

Respuesta
 
Herramientas Desplegado
Antiguo 27-jul-2005, 09:40   #1 (permalink)
Perelu ha deshabilitado el karma
 
Fecha de Ingreso: junio-2005
Mensajes: 15
Instanciar una clase

Como podria saber en un determinado momento si una clase ha sido ya instanciada o no? Me explico..

Tengo una clase tal que así:

Public class Perelu
Public Event HacedmeCaso

' Constructor
Public sub New()
Proceso1()
Proceso2()
end sub

end class

Tanto el Proceso1 como el proceso 2 lanzan el evento HacedmeCaso y, además la clase lo lanza al modificar cualquiera de sus propiedades...

¿ Se puede saber si mi clase está instanciada en ese momento (Ya ha hecho el new) o todavía se encuentra en el constructor (dentro del New) al recoger el evento ?

Espero no aberles aburrido mucho... Grácias de antemano.
Perelu está desconectado   Responder Citando
Antiguo 27-jul-2005, 11:09   #2 (permalink)
Rony J. está en el buen camino
 
Avatar de Rony J.
 
Fecha de Ingreso: noviembre-2004
Ubicación: Portuguesa - Vzla
Mensajes: 219
Enviar un mensaje por MSN a Rony J. Enviar un mensaje por Yahoo  a Rony J.
Cita:
Iniciado por Perelu
¿ Se puede saber si mi clase está instanciada en ese momento
exactamente que necesitas?

Puedes comprobar con "nothing" si tu clase está instanciada, si existe..

Por ejemplo:
Dim Myclase As Perelu = New Perelu
If Not Myclase is nothing then
'tu clase existe
else
'obvio, lo contrario jej
end if

Espero te sirva de ayuda. Saludos.
__________________
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas. Albert Einstein.
Coloquemos a nuestros mensajes títulos apropiados que animen más a la gente a leerlos y resulten más útiles en las búsquedas. ¡Evitemos los "Urgeenteee", "Solo expertoosss" y títulos por el estilo!
Rony J. está desconectado   Responder Citando
Antiguo 28-jul-2005, 04:45   #3 (permalink)
Perelu ha deshabilitado el karma
 
Fecha de Ingreso: junio-2005
Mensajes: 15
Correcto Rony pero no es exactamente lo que necesito.

Yo lo que quiero es saber desde mi propia clase si ya he sido instanciado del todo o no.. algo así:

Public ReadOnly Property Instanciado() As Boolean
Get
If Me Is Nothing Then
Return False
Else
Return True
End If
End Get
End Property

El problema es que esto no funciona, si llamo a la propiedad Instanciado desde el new me devuelve siempre True, aunque no se haya la función todavía.

También he probado con una función shared con el mismo resultado:

Public Shared ReadOnly Property Instanciado(ByVal objClase As Object) As Boolean
Get
If objClase Is Nothing Then
Return False
Else
Return True
End If
End Get
End Property

El principal problema es que no puedo poner una variable externa que indique que ya se ha instanciado o no la ha hecho todavía porque si heredamos esta clase es pasible que se sobreescriba el método new..

Gracias de todas maneras por intentar ayudarme. Un Saludo.
Perelu está desconectado   Responder Citando
Antiguo 28-jul-2005, 14:13   #4 (permalink)
HenrydeSousa ha deshabilitado el karma
 
Avatar de HenrydeSousa
 
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 290
Creo que puedes hacer uso de una propiedad boolean que sea estática, luego lo que haces es asignarle un valor por ej: True en el constructor de la clase, de esta forma cuando crees una instancia de la clase ya ahí le indicas a la propiedad el valor True que indica que la clase ha sido instanciada. Luego desde donde quieras puedes preguntar por el valor de esa propiedad, si es True ya fue instanciada sino pues no. La verdad no sé si funcione o sea lo correcto, pues nunca lo he hecho y porque fue lo primero que se me vino a la cabeza :). Saludos...
HenrydeSousa está desconectado   Responder Citando
Antiguo 29-jul-2005, 02:37   #5 (permalink)
Perelu ha deshabilitado el karma
 
Fecha de Ingreso: junio-2005
Mensajes: 15
Eso sería lo mas cómodo pero se me presentó el problema de la herencia:

Public class Perelu
public Instanciada as boolean

public sub new
instanciada = False
Proceso1()
Proceso2()
instanciada = True
end sub
end class


Public class Perelu2
inherits Perelu

Public sub new
mybase.new
instanciada = False
Proceso3()
Proceso4()
instanciada = True
end sub

end class



De esta manera estaría solucionado ¡¡¡ pero !!! (Siempre hay un pero..) Que pasa si alguien hereda de mi clas y o le pone en el new la propiedad instanciada = False, lo que pretendo es tener una propiedad que no dependa del programador que por si misma sea capaz de indicarme si la clase ha sido instanciada ya o no. He estado mirando algunas propiedades del Type de la clase por si allí me indicaba algo pero no lo he encontrado. A lo mejor en System.Reflection puedo encontrar algo, si alguien tiene idea de algo parecido... De todas formas muchas gracias por intentar ayudarme chicos..
Perelu está desconectado   Responder Citando
Antiguo 29-jul-2005, 08:19   #6 (permalink)
HenrydeSousa ha deshabilitado el karma
 
Avatar de HenrydeSousa
 
Fecha de Ingreso: septiembre-2004
Ubicación: Venezuela
Mensajes: 290
La verdad no termino de entender que es lo que necesitas hacer.
Cita:
Que pasa si alguien hereda de mi clas
Cuál sería el problema de que alguien herede de tu clase?
Cita:
y o le pone en el new la propiedad instanciada = False
Si el constructor de tu clase no recibe ningún parámetro, entonces no le podrás mandar ningún argumento cuando instancies tu clase, es decir, no le podrá poner a la propiedad instanciada = false. En el constructor de la clase lo que vas a hacer es inicializar la propiedad en true. La propiedad tendría que ser estática. Pues disculpa por no poder ayudarte más pero no se me ocurre más nada. Si logras hacer lo que quieres sería bueno que luego lo compartieras con nosotros ya que por algo no hemos podido ayudarte. Saludos...
HenrydeSousa está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 20:47.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93