[.NET] Qué es un Reference Type.


¿Qué es un Reference Type?

Básicamente un Reference Type es aquel cuya variable almacena la dirección de memoria de sus datos en una zona de memoria denominada Stack. Los datos reales a los que hace referencia se encuentran en una zona de memoria llamada Heap.
Debido a que los reference types representan la dirección de los datos en lugar de los datos en sí mismo, asignar una variable de referencia a otra no copia los datos. En cambio, la asignación de una variable de reference type a otra instancia crea una segunda copia de la referencia, esto quiere decir que dos variables reference type pueden apuntar a los mismos datos.

Ejemplos de Reference Type son los siguientes:

  • String.
  • Los arrays, incluso si sus elementos son value types.
  • Los tipos Class.
  • Object
  • Delegados.
  • etc..

En el .NET Framework existen más de 2.500 reference types predefinidos de los cuales destacaremos los siguientes:

System.Object El tipo Object es el tipo más general del .NET Framework. Todo tipo por referencia deriva de él.
System.String Datos de tipo texto o cadena.
System.Text.StringBuilder Datos de tipo texto o cadena dinámicos.
System.Array Matrices de datos. Esta es la clase base para todos los arrays.
System.IO.Stream Es un buffer para leer o escribir en un archivo, dispositivo, memoria, en la red, etc…
System.Exception Maneja las excepciones a nivel de aplicación o sistema. Es la clase base sobre la que heredan todos los tipos de excepción.

Supongamos que definimos una clase muy básica:

class Class1
{
    public int Value = 0;
}

Cuando instanciemos nuestra clase

Class1 myClass = new Class1();

En la memoria ocurre lo siguiente:

Captura

Como se puede observar en el Stack se almacena la referencia al objeto myClass y en el Heap se almacena el contenido de dicho objeto, en nuestro caso un entero llamado Value con valor 0.

Para ver que dos variables de referencia pueden apuntar a los mismos datos tenemos este ejemplo:

class Class1 {
    public int Value = 0;
}
class Test
{
    static void Main() {
        Class1 r1 = new Class1();
        Class1 r2 = r1; // r2 apunta a la misma zona de memoria que r1
        r2.Value = 123;

        Console.WriteLine("El valor de los datos son: {0}, {1}", r1.Value, r2.Value);
     }
}

// La salida será la siguiente
El valor de los datos son: 123, 123

Ya hemos aprendido qué es un Reference Type y junto al post anterior podemos ver las diferencias que existen con los Value Types.

Os dejo un enlace de la MSDN para profundizar un poco más en ello.

Reference Types (C# Reference)

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s