Saber si un objeto esta instanciado

10/04/2007 - 13:42 por Pedro | Informe spam
Como saber si un objeto de determinado tipo (clase) se encuentra
instanciado?

Ej. public static bool ExisteObjeto(string cRutaObjeto)

//Ejemplo: bool ExisteMiobjeto=ExisteObjeto("Form1.MiObjeto")

Pedro

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
10/04/2007 - 14:09 | Informe spam
"Pedro" wrote in message
news:%
Como saber si un objeto de determinado tipo (clase) se encuentra
instanciado?

Ej. public static bool ExisteObjeto(string cRutaObjeto)

//Ejemplo: bool ExisteMiobjeto=ExisteObjeto("Form1.MiObjeto")



Me temo que estás confundiendo la clase con el objeto. Un objeto por
definición siempre está instanciado, sino no existe el objeto. Creo que la
pregunta que haces es en realidad "Cómo saber si existe alguna instancia de
una clase determinada". Ante la cual la respuesta es básicamente que "en
general no se puede".
Si solo creas en tu programa una única instancia (un solo objeto de esa
clase) y siempre usas una variable concreta para guardar la referencia a ese
objeto, entonces está instanciado siempre que la referencia no sea null.
Incluso aunque la referencia sea null, el objeto podría seguir instanciado
si el recogedor de basura todavía no lo ha destruido.
Si no sigues ningún criterio y guardas las referencias en cualquier
sitio, entonces la única forma de controlar las instancias es modificar el
fuente de la clase para que siga un modelo de tipo "Fatoría de objetos" y el
método-factoría junto con el Finalizador de la clase lleven internamente el
control de todas las instancias creadas.
Respuesta Responder a este mensaje
#2 Pedro
10/04/2007 - 14:35 | Informe spam
Quizas no me exprese bien. Es para un ambiente runtime.

Como saber si un objeto de determinado tipo (clase) se encuentra
instanciado?

Ej. public static bool ExisteObjeto(string cRutaObjeto)

//Ejemplo: bool ExisteMiobjeto=ExisteObjeto("Form1.MiObjeto")



Me temo que estás confundiendo la clase con el objeto. Un objeto por
definición siempre está instanciado, sino no existe el objeto. Creo que la
pregunta que haces es en realidad "Cómo saber si existe alguna instancia
de una clase determinada".



Claro, mas o menos eso fue lo que quise preguntar solo que lo exprese mal.

Ante la cual la respuesta es básicamente que "en general no se puede".
Si solo creas en tu programa una única instancia (un solo objeto de esa
clase) y siempre usas una variable concreta para guardar la referencia a
ese objeto, entonces está instanciado siempre que la referencia no sea
null. Incluso aunque la referencia sea null, el objeto podría seguir
instanciado si el recogedor de basura todavía no lo ha destruido.
Si no sigues ningún criterio y guardas las referencias en cualquier
sitio, entonces la única forma de controlar las instancias es modificar el
fuente de la clase para que siga un modelo de tipo "Fatoría de objetos" y
el método-factoría junto con el Finalizador de la clase lleven
internamente el control de todas las instancias creadas.




Realmente no voy tan lejos. Me explico con un ejemplo. Tengo una clase Form
y necesito desde uno de sus metodos preguntar (para usarse en runtime) si
dentro de ese form ya existe un objeto llamado MiObjeto (para el caso no me
interesa de que clase sea MiObjeto).
Uso esa informacion para tomar alguna decision en runtime dependiendo si el
objeto ya existe.

En Visual Foxpro yo hacia:

if VARTYPE(This.MiObjeto)<>"U" //"U"-Unknown...
...ya el objeto existe



Pedro
Respuesta Responder a este mensaje
#3 Alberto Poblacion
10/04/2007 - 15:06 | Informe spam
"Pedro" wrote in message
news:e$
Quizas no me exprese bien. Es para un ambiente runtime.



¿A qué te refieres? ¿Qué es un "ambiente runtime"?

[...]
Realmente no voy tan lejos. Me explico con un ejemplo. Tengo una clase
Form y necesito desde uno de sus metodos preguntar (para usarse en
runtime) si dentro de ese form ya existe un objeto llamado MiObjeto



Una vez más, hay que preguntar que qué es lo que quieres decir con
"estar dentro de un form" un objeto. Los objetos no "están dentro" de ningún
form, sino dentro del Heap del motor de ejecución. En la Clase que define el
Form podría haber variables miembro de la clase que se usen para guardar
referencias a objetos, pero en ese caso lo que puedes hacer es ver si la
variable vale null.

¿Más que a Objetos, No te estarás refiriendo a Controles dentro del
Form? En ese caso sí que se puede saber si un determinado control pertenece
al form, porque el Form tiene una colección llamada Controls que puedes
recorrer y buscar en ella cualquier control que te intererse.
Respuesta Responder a este mensaje
#4 Alfredo Novoa
10/04/2007 - 15:08 | Informe spam
On Tue, 10 Apr 2007 14:09:17 +0200, "Alberto Poblacion"
wrote:

Me temo que estás confundiendo la clase con el objeto. Un objeto por
definición siempre está instanciado, sino no existe el objeto.



Primero "instanciar" e "instanciado" no existen en español, y no está
nada claro que es lo que quiere decir la gente que usa esos engendros
de palabras.

Y segundo, no hay ningún estandar sobre lo que significa objeto, así
que alguien podría perfectamente decir que en:

string s = null;

"s" es un objeto no inicializado. Que creo que es a lo que se refiere
Pedro.


Saludos
Respuesta Responder a este mensaje
#5 Alfredo Novoa
10/04/2007 - 15:11 | Informe spam
On Tue, 10 Apr 2007 08:35:09 -0400, "Pedro" wrote:

Tengo una clase Form
y necesito desde uno de sus metodos preguntar (para usarse en runtime) si
dentro de ese form ya existe un objeto llamado MiObjeto (para el caso no me
interesa de que clase sea MiObjeto).

En Visual Foxpro yo hacia:

if VARTYPE(This.MiObjeto)<>"U" //"U"-Unknown...
...ya el objeto existe



if (miFormulario.MiObjeto != null)
... el objeto ya existe


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