[SOLUCIONADO] C sharp Pregunta por Referencia de Objetos

  • 2 Respuestas
  • 239 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado crenpeva

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    3.33%
  • Reputación 0
    • Ver Perfil
Estoy iniciando en cSharp, pero tengo dudas con el ejercicio que les pegare mas abajo.  El ejercicio en si lo entiendo, lo debugeo con el visual studio y reviso como van cambiando las variables..o atributos de clase.
El atributo "raiz" es el que tiene tofos los notos, pero no entiendo porque, ya que en el código no veo donde le agregan nodos, si se le agregan al atributo "fondo".
Esto es lo que no entiendo, donde se le van agregando los nodos a "raiz".
Gracias.
------------------------------------------------------
Código: C#
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ListaTipoCola2
  7. {
  8.     class Cola
  9.     {
  10.         class Nodo
  11.         {
  12.             public int info;
  13.             public Nodo sig;
  14.         }
  15.  
  16.         private Nodo raiz, fondo;
  17.  
  18.         public Cola()
  19.         {
  20.             raiz = null;
  21.             fondo = null;
  22.         }
  23.  
  24.         public bool getVacia() {
  25.             return (raiz == null);
  26.         }
  27.  
  28.         public void Insertar(int info)
  29.         {
  30.             Nodo nuevo nuevo = You are not allowed to view links. Register or Login Nodo();
  31.             nuevo.info = info;
  32.             nuevo.sig = null;
  33.             if ( getVacia() )
  34.             {
  35.                 raiz = nuevo;
  36.                 fondo = nuevo;
  37.             }
  38.             else
  39.             {
  40.                 fondo.sig = nuevo;
  41.                 fondo = nuevo;
  42.             }
  43.         }
  44.     }
  45. }
« Última modificación: Abril 06, 2020, 02:16:46 pm por Bartz »

Conectado tr0n

  • *
  • Underc0der
  • Mensajes: 66
  • Actividad:
    50%
  • Reputación 3
    • Ver Perfil
    • Chat Latino

Re:C sharp Pregunta por Referencia de Objetos

  • en: Abril 02, 2020, 09:05:07 pm
Hola,
me tomo un tiempo en averiguarlo, pero si, los nodos se van agregando a raíz, porque cuando se ejecuta el bloque if, raíz y fondo están referenciando al mismo objeto, es decir, que en ese punto, cualquier cambio que hagas en fondo, lo vas a ver en raiz.

               _____
fondo -> | Nodo|
raiz    -> |_____|

Cuando se vuelve a llamar insertar, se crea un nuevo Nodo. Esto seria la referencia antes del bloque else.

nuevo -> | Nodo |

               _____
fondo -> | Nodo|
raiz    -> |_____|

Cuando se ejecuta la primera linea del bloque else, fondo.sig = nodo, el cambio se ve reflejado en raiz

               ________
fondo -> | Nodo      |    _____
raiz    -> |_____sig->  | Nodo |
                                   |          |
                     nuevo ->|_____|

Ahora, en la siguiente línea de código, a fondo se le cambia la referencia, ya no va a apuntar al mismo nodo que raíz, en cambio, va apuntar al mismo nodo que nuevo

               ________
              | Nodo      |    _____
raiz    -> |_____sig->  | Nodo |
                      fondo-> |          |
                     nuevo ->|_____|

Espero haber explicado bien. Lo importante es tener en cuenta que al asignar un objeto a una variable, esta variable NO recibe una copia del objeto con todos sus campos, en ves de eso, recibe una referencia para modificar este objeto.
« Última modificación: Abril 02, 2020, 09:11:33 pm por tr0n »

Desconectado crenpeva

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    3.33%
  • Reputación 0
    • Ver Perfil

Re:C sharp Pregunta por Referencia de Objetos

  • en: Abril 06, 2020, 10:27:17 am
Estimado,
al fin una respuesta clara y con conocimientos....ya la había planteado en otros foros, pero nadie fue capaz o se dio el tiempo de dar una explicación como la que me diste. Si entiendo algo de "POO", por lo que claramente se de lo que hablas, que al asignad una variable que es un objeto, no se le asigna un valor, sino que una referencia.
Necesitaba esta explicación ya que no sacaba nada con avanzar en mi curso sino lograba entender donde y porque se produce que "raiz" tiene todos los nodos.
Muchas gracias!

 

[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 26480
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 13965
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 11775
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 17866
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 9212
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made