• Jueves 9 de Mayo de 2024, 22:32

Autor Tema:  Dudas Sobre Clases!!  (Leído 1135 veces)

Said

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Dudas Sobre Clases!!
« en: Lunes 20 de Agosto de 2007, 21:36 »
0
Hola, tengo este codigo.

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication2

{

class Objeto

{

public int dato;

public Objeto(int valor)

{

this.dato = valor;

Console.WriteLine("Construido Objeto con el valor {0}", valor);

}

~Objeto()

{

Console.WriteLine("Destructor de Objeto con el valor {0}", this.dato);

}

}

class Destructores2App

{

static void Main()

{

Objeto a;

string c;

Console.WriteLine("Pulsa INTRO para instanciar el primer objeto");

c = Console.ReadLine();

a = new Objeto(1);

Console.WriteLine("Pulsa INTRO para instanciar el segundo objeto");

c = Console.ReadLine();

a = new Objeto(2);

Console.WriteLine("Pulsa INTRO para instanciar el tercer objeto");

c = Console.ReadLine();

a = new Objeto(3);

Console.WriteLine("Pulsa INTRO para ejecutar a=null");

c = Console.ReadLine();

a = null;

Console.WriteLine("Pulsa INTRO para ejecutar CG.Collect()");

c = Console.ReadLine();

GC.Collect();

c = Console.ReadLine();

}

}

}



Lo que yo entiendo ahi es que esta creando instancias de Objeto en la variable a. Esto ejecuta el constructor del objeto el cual tiene un parametro (valor).

Mi duda es, al hacer:

a = new Objeto(1);

a = new Objeto(2);

a = new Objeto(3);

Estoy creando tres instancias diferentes a Objeto?

Si es asi, que pasa con las instancias anteriores cuendo creo una nueva en la misma variable, es decir, que pasa con a cuando se ejecuta

a = new Objeto(2);

Si antes se habia instanciado con el parametro 1.



Y la otra duda es: Porque cuando se ejecuta el destructor, "destruye" el objeto instanciado con cada uno de los parametros? en realidad si se crearon tres instancias? pero como si las mismas se asignaron siempre a la misma variable (a).



De antemano Gracias!!

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Dudas Sobre Clases!!
« Respuesta #1 en: Martes 21 de Agosto de 2007, 04:48 »
0
¿Que tal Said?

Citar
a = new Objeto(1);

a = new Objeto(2);

a = new Objeto(3);

Estoy creando tres instancias diferentes a Objeto?
Si, así es. Pero no es "instancia a", sino "instancia de" :)

Citar
Si es asi, que pasa con las instancias anteriores cuendo creo una nueva en la misma variable, es decir, que pasa con a cuando se ejecuta a = new Objeto(2);

Si antes se habia instanciado con el parametro 1.
Se pierde la referencia al objeto a original, pero este sigue en memoria hasta que se ejecute el recolector de basura.

Citar
Y la otra duda es: Porque cuando se ejecuta el destructor, "destruye" el objeto instanciado con cada uno de los parametros? en realidad si se crearon tres instancias? pero como si las mismas se asignaron siempre a la misma variable (a).
Justamente porque los tres objetos aún se encuentran en memoria siempre y cuando el recolector de basura no se haya ejecutado ya.

Si no te queda claro nos avisas  :rolleyes:

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Said

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Dudas Sobre Clases!!
« Respuesta #2 en: Martes 21 de Agosto de 2007, 17:01 »
0
Si muchas gracias!!

AAhh!!  sorry es que estoy leyendo un libro (Visual C#) de Javier Ceballos, el tutorial de msnd de C# y la web del Guille de donde saque ese ejemplo y creo que ya me lie con las clases por andar en los tres.   <_<


Mi duda ahora es:

Cuando creo una variable que hace referencia a un objeto, que tengo al final?

La propia variable que contiene la referencia, el objeto y una instancia?

Esa ultima me confunde, la instancia, tengo esas tres cosas? porque a fin de cuentas es la instancia la que se "destuye" con el GC no?

o no es asi?  :huh:


Gracias por responder!!   :hola:

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Dudas Sobre Clases!!
« Respuesta #3 en: Martes 21 de Agosto de 2007, 18:35 »
0
Creo que te estás confundiendo un poco por el nombre que utilizaste para tu clase (Objeto) porque en realidad, un objeto es una instancia de una clase y en este caso "a" es un objeto (Instancia) de la clase objeto, eso puede confundir un poco.
Por lo tanto:
Citar
Cuando creo una variable que hace referencia a un objeto, que tengo al final?
La propia variable que contiene la referencia, el objeto y una instancia?
El objeto (NO la clase objeto) y la instancia son la misma cosa. Por lo tanto solo te queda la referencia y la instancia. La primera vendría a ser "a" y la instancia se encuentra en memoria, por lo tanto al ejecutar la segunda sentencia de instanciasión:
Código: Text
  1. a = new Objeto(2);
  2.  
Se crea un nueva instancia de la clase objeto y la referencia a la instancia de la clase objeto original (en la que el atributo dato valía "1") se pierde tornándose este objeto inaccesible por lo cual en la próxima pasada del recolector de basura este objeto será eliminado momento en el que se ejecutará el código de su destructor.

Citar
es la instancia la que se "destuye" con el GC no?

o no es asi?
Claro, o lo que es lo mismo decir que lo que se destruye es el objeto ;)

Un saludo
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

Said

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Dudas Sobre Clases!!
« Respuesta #4 en: Martes 21 de Agosto de 2007, 18:53 »
0
:hola: ok, muchicisimas gracias, ya me queda mas claro!!

Gracias de nuevo   :lol: