Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Instanciar una clase (http://www.forosdelweb.com/f29/instanciar-clase-320311/)

Perelu 27/07/2005 09:40

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.

Rony J. 27/07/2005 11:09

Cita:

Iniciado por Perelu
¿ Se puede saber si mi clase está instanciada en ese momento

:pensando: 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.

Perelu 28/07/2005 04:45

:arriba: 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í: :no:

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: :no:

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.

HenrydeSousa 28/07/2005 14:13

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...

Perelu 29/07/2005 02:37

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.. :risa:

HenrydeSousa 29/07/2005 08:19

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...


La zona horaria es GMT -6. Ahora son las 01:04.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.