Ayuda a un Novato

09/06/2004 - 09:46 por luis | Informe spam
Supongo que la pregunta or parecerá excesivamente simple, pero muchas
gracias de antemano.

Tengo una clase "Persona"
Quiero instanciarla 2 veces, p1 y p2.
La duda es la siguiente,

En una aplicación asp.net, quiero poder trabajar con los objetos p1 y p2
desde distintos WebForms y distintas clases, dentro de la misma sesion. Como
lo debo hacer?, y en caso de no ser en la misma sesión, esto es "objetos de
aplicacion", como los instancio y/o declaro??
Muchas gracias.

Preguntas similare

Leer las respuestas

#6 luis
09/06/2004 - 19:54 | Informe spam
Efectivamente FUNCIONA :), muchas gracias, y perdona si te he dado mucho la
paliza.

"Cesar Garcia Hernandez" escribió en el mensaje
news:
A la primera pregunta que me haces... te soy sincero... no tengo la menor
idea jejejeje. Supongo que en la ventana de comandos hara lo que es el


late
binding, pero es una especulacion, realmente no se por que pasa eso.

A lo segundo, pues, en cierta forma tienes razon. Quizas el tener en la
session algo y luego tener que crear asignarle a un objeto la instancia de
ese algo que tenias en session, puede ser que implique un doble uso de
memoria. En este caso quizas puedas hacer lo siguiente

(espero que funcione ya que no tengo que Visual Studio instalado aqui :P)

string DNI;
DNI = ((Persona) Session["personaa"]).dni;

quizas asi funcione

"luis" <luisenrique> escribió en el mensaje
news:
> Mas gracias por tu respuesta.
> Te comento
> Lo que me comentas, evidentemente, funciona. pero depuro la aplicacion y
en
> la ventana de comandos
> (en tiempo de ejecucion) pongo Session["personaa"].dni (dni es una
variable
> de la clase persona) y si me indica su valor, pero si lo pongo en tiempo
de
> edición, no me deja compilar, dice que dni no es un atributo de
> Session["personaa"]. Tiene alguan explicación?
>
> Y otra pregunta ( a riesgo de ser pesado), lo que me indicas tú no es


una
> pérdida de memoria?, ya que así tendría dos objetos en la sesión
> Session["personaa"] y p, siendo lo mismo.
>
> Gracias
>
> "Cesar Garcia Hernandez" escribió en el mensaje
> news:
> > lo que pasa es que no puedes llamar directamente a los metodos de
persona
> > por medio de session, por que lo que hay en session es un object no


una
> > persona.
> >
> > Tendrias que hacer algo como
> >
> > Persona p = (Persona) Session["personaa"];
> >
> > y luego..
> >
> > p.edad();
> >
> > ...
> >
> > Puedes usar ese metodo de conversion del object que hay en Session o


el
> que
> > desees con tal de que conviertas explicitamente lo que hay dentro de
> Session
> > a una clase Persona.
> >
> >
> >
> >
> >
> > "luis" <luisenrique> escribió en el mensaje
> > news:Oj7#
> > > Muchas gracias Cesar, pero...
> > > En mi Clase , si pongo Session["personaa"]. no puedo acceder a los
> métodos
> > > de p1.
> > > Debo instanciar de nuevo Persona, y luego igualarlo a
> Session["personaa"]
> > >
> > >
> > > Persona p1 = new Persona();
> > > p1.edad(); // Esto si puedo
> > > Session["personaa"] = p1;
> > >
> > > Session["personaa"].p1 // ESTO NO LO PUEDO HACER, CÓMO LO HARÍA?
> > >
> > >
> > > Repito mi agradecimiento.
> > > Un saludo
> > >
> > >
> > > "Cesar Garcia Hernandez" escribió en el


mensaje
> > > news:
> > > > hola luis, lo que quieres hacer tiene que hacerse como si fuera


una
> > > variable
> > > > de sesion.
> > > >
> > > > algo asi
> > > >
> > > > Persona p1 = new Persona();
> > > > Persona p2 = new Persona();
> > > >
> > > > Session["personaa"] = p1;
> > > > Session["personab"] = p2;
> > > >
> > > >
> > > > y luego en tus otras clases llamar a la variable
Session["personab"].
> > > >
> > > > Claro que tienes que ver si estas instancias seran diferentes por
> > usuario
> > > o
> > > > son iguales para todos los usuarios. En ese caso, en lugar de
session
> > > seria
> > > > application lo que tendrias que usar.
> > > >
> > > > Saludos
> > > >
> > > >
> > > > "luis" <luisenrique> escribió en el mensaje
> > > > news:
> > > > > Supongo que la pregunta or parecerá excesivamente simple, pero
> muchas
> > > > > gracias de antemano.
> > > > >
> > > > > Tengo una clase "Persona"
> > > > > Quiero instanciarla 2 veces, p1 y p2.
> > > > > La duda es la siguiente,
> > > > >
> > > > > En una aplicación asp.net, quiero poder trabajar con los
objetos
> > p1
> > > y
> > > > p2
> > > > > desde distintos WebForms y distintas clases, dentro de la misma
> > sesion.
> > > > Como
> > > > > lo debo hacer?, y en caso de no ser en la misma sesión, esto es
> > "objetos
> > > > de
> > > > > aplicacion", como los instancio y/o declaro??
> > > > > Muchas gracias.
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Octavio Hernandez
09/06/2004 - 21:01 | Informe spam
Luis,

a) Session["personaa"].dni - si lo pongo en tiempo de edición, dice que dni
no es un atributo de Session["personaa"].

Estáticamente, Session["personaa"] es de tipo object. Al "sacar" un objeto
del contenedor, es necesario convertirlo al tipo al que nosotros sabemos que
pertenece. Hay que utilizar ((Persona)Session["personaa"]).DNI ó
(Session["personaa"] as Persona).DNI.

b) ¿Lo que me indicas tú no es una pérdida de memoria?, ya que así tendría
dos objetos Session["personaa"] y p, siendo lo mismo

Ojo, lo que habría sería no dos objetos, sino dos referencias a un mismo
objeto!!!
Las referencias ocupan sólo el tamaño de un puntero, y su coste de crearlas
es mínimo tanto en espacio como en tiempo.

Salu2 - Octavio
Respuesta Responder a este mensaje
#8 Cesar Garcia Hernandez
09/06/2004 - 21:36 | Informe spam
ok. no te preocupes que para eso estan los grupos

saludos

"luis" <luisenrique> escribió en el mensaje
news:#
Efectivamente FUNCIONA :), muchas gracias, y perdona si te he dado mucho


la
paliza.

"Cesar Garcia Hernandez" escribió en el mensaje
news:
> A la primera pregunta que me haces... te soy sincero... no tengo la


menor
> idea jejejeje. Supongo que en la ventana de comandos hara lo que es el
late
> binding, pero es una especulacion, realmente no se por que pasa eso.
>
> A lo segundo, pues, en cierta forma tienes razon. Quizas el tener en la
> session algo y luego tener que crear asignarle a un objeto la instancia


de
> ese algo que tenias en session, puede ser que implique un doble uso de
> memoria. En este caso quizas puedas hacer lo siguiente
>
> (espero que funcione ya que no tengo que Visual Studio instalado aqui


:P)
>
> string DNI;
> DNI = ((Persona) Session["personaa"]).dni;
>
> quizas asi funcione
>
> "luis" <luisenrique> escribió en el mensaje
> news:
> > Mas gracias por tu respuesta.
> > Te comento
> > Lo que me comentas, evidentemente, funciona. pero depuro la aplicacion


y
> en
> > la ventana de comandos
> > (en tiempo de ejecucion) pongo Session["personaa"].dni (dni es una
> variable
> > de la clase persona) y si me indica su valor, pero si lo pongo en


tiempo
> de
> > edición, no me deja compilar, dice que dni no es un atributo de
> > Session["personaa"]. Tiene alguan explicación?
> >
> > Y otra pregunta ( a riesgo de ser pesado), lo que me indicas tú no es
una
> > pérdida de memoria?, ya que así tendría dos objetos en la sesión
> > Session["personaa"] y p, siendo lo mismo.
> >
> > Gracias
> >
> > "Cesar Garcia Hernandez" escribió en el mensaje
> > news:
> > > lo que pasa es que no puedes llamar directamente a los metodos de
> persona
> > > por medio de session, por que lo que hay en session es un object no
una
> > > persona.
> > >
> > > Tendrias que hacer algo como
> > >
> > > Persona p = (Persona) Session["personaa"];
> > >
> > > y luego..
> > >
> > > p.edad();
> > >
> > > ...
> > >
> > > Puedes usar ese metodo de conversion del object que hay en Session o
el
> > que
> > > desees con tal de que conviertas explicitamente lo que hay dentro de
> > Session
> > > a una clase Persona.
> > >
> > >
> > >
> > >
> > >
> > > "luis" <luisenrique> escribió en el mensaje
> > > news:Oj7#
> > > > Muchas gracias Cesar, pero...
> > > > En mi Clase , si pongo Session["personaa"]. no puedo acceder a los
> > métodos
> > > > de p1.
> > > > Debo instanciar de nuevo Persona, y luego igualarlo a
> > Session["personaa"]
> > > >
> > > >
> > > > Persona p1 = new Persona();
> > > > p1.edad(); // Esto si puedo
> > > > Session["personaa"] = p1;
> > > >
> > > > Session["personaa"].p1 // ESTO NO LO PUEDO HACER, CÓMO LO HARÍA?
> > > >
> > > >
> > > > Repito mi agradecimiento.
> > > > Un saludo
> > > >
> > > >
> > > > "Cesar Garcia Hernandez" escribió en el
mensaje
> > > > news:
> > > > > hola luis, lo que quieres hacer tiene que hacerse como si fuera
una
> > > > variable
> > > > > de sesion.
> > > > >
> > > > > algo asi
> > > > >
> > > > > Persona p1 = new Persona();
> > > > > Persona p2 = new Persona();
> > > > >
> > > > > Session["personaa"] = p1;
> > > > > Session["personab"] = p2;
> > > > >
> > > > >
> > > > > y luego en tus otras clases llamar a la variable
> Session["personab"].
> > > > >
> > > > > Claro que tienes que ver si estas instancias seran diferentes


por
> > > usuario
> > > > o
> > > > > son iguales para todos los usuarios. En ese caso, en lugar de
> session
> > > > seria
> > > > > application lo que tendrias que usar.
> > > > >
> > > > > Saludos
> > > > >
> > > > >
> > > > > "luis" <luisenrique> escribió en el mensaje
> > > > > news:
> > > > > > Supongo que la pregunta or parecerá excesivamente simple, pero
> > muchas
> > > > > > gracias de antemano.
> > > > > >
> > > > > > Tengo una clase "Persona"
> > > > > > Quiero instanciarla 2 veces, p1 y p2.
> > > > > > La duda es la siguiente,
> > > > > >
> > > > > > En una aplicación asp.net, quiero poder trabajar con los
> objetos
> > > p1
> > > > y
> > > > > p2
> > > > > > desde distintos WebForms y distintas clases, dentro de la


misma
> > > sesion.
> > > > > Como
> > > > > > lo debo hacer?, y en caso de no ser en la misma sesión, esto


es
> > > "objetos
> > > > > de
> > > > > > aplicacion", como los instancio y/o declaro??
> > > > > > Muchas gracias.
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 luis
10/06/2004 - 17:06 | Informe spam
Ok, Octavio, "casi" de acuerdo contigo ;)
El problema de instanciar de nuevo a persona, es que los atributos que
modifique en este objeto, no lo estoy haciendo en el objeto de sesión, no?,
tendría que , mediante código, igualarlo en todas las clases que lo
modifiquen. (con el consiguiente riesgo, de olvido del programador).

"Octavio Hernandez" escribió en el mensaje
news:#
Luis,

a) Session["personaa"].dni - si lo pongo en tiempo de edición, dice que


dni
no es un atributo de Session["personaa"].

Estáticamente, Session["personaa"] es de tipo object. Al "sacar" un objeto
del contenedor, es necesario convertirlo al tipo al que nosotros sabemos


que
pertenece. Hay que utilizar ((Persona)Session["personaa"]).DNI ó
(Session["personaa"] as Persona).DNI.

b) ¿Lo que me indicas tú no es una pérdida de memoria?, ya que así tendría
dos objetos Session["personaa"] y p, siendo lo mismo

Ojo, lo que habría sería no dos objetos, sino dos referencias a un mismo
objeto!!!
Las referencias ocupan sólo el tamaño de un puntero, y su coste de


crearlas
es mínimo tanto en espacio como en tiempo.

Salu2 - Octavio


Respuesta Responder a este mensaje
#10 Octavio Hernandez
10/06/2004 - 23:04 | Informe spam
Ok, Octavio, "casi" de acuerdo contigo ;)
El problema de instanciar de nuevo a persona, es que los atributos que
modifique en este objeto, no lo estoy haciendo en el objeto de sesión,


no?,
tendría que , mediante código, igualarlo en todas las clases que lo
modifiquen. (con el consiguiente riesgo, de olvido del programador).



Luis,

Con lo que te indicaba César:

Persona p = (Persona) Session["personaa"];

No se estaría instanciando un nuevo objeto Persona, sino que se estaría
poniendo a la variable p a apuntar AL MISMO OBJETO al que apunta
Session["personaa"]. Cualquier cambio que hagas a esa instancia a través de
p *SI* lo estarás aplicando también a Session["personaa"] (es el mismo
objeto).

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