Tipos de valor y tipos de referencia

Hay dos clases de tipos en Visual Basic: tipos de referencia y tipos de valor. Las variables de tipos de referencia almacenan referencias en sus datos (objetos), mientras que las variables de tipos de valor contienen directamente los datos. Con los tipos de referencia, dos variables pueden hacer referencia al mismo objeto y, por lo tanto, las operaciones en una variable pueden afectar al objeto al que hace referencia la otra variable. Con los tipos de valor, cada variable tiene su propia copia de los datos, y no es posible que las operaciones en una variable afecten a la otra (excepto en el caso del modificador ByRef en parámetros).

Tipos de valor

Un tipo de datos es un tipo de valor si contiene los datos dentro de su propia asignación de memoria. Los tipos válidos incluyen los siguientes:

  • Todos los tipos de datos numéricos

  • Boolean, Char y Date

  • Todas las estructuras, incluso si sus miembros son tipos de referencia

  • Enumeraciones, ya que su tipo subyacente es siempre SByte, Short, Integer, Long, Byte, UShort, UInteger o ULong

Cada estructura es un tipo de valor, incluso si contiene miembros de tipo de referencia. Por este motivo, las estructuras de .NET Framework implementan tipos de valor como Char e Integer.

Puede declarar un tipo de valor mediante la palabra clave reservada, por ejemplo, Decimal. También puede usar la palabra clave New para inicializar un tipo de valor. Esto es especialmente útil si el tipo tiene un constructor que toma parámetros. Un ejemplo de esto es el constructor Decimal(Int32, Int32, Int32, Boolean, Byte), que compila un nuevo valor Decimal a partir de los elementos proporcionados.

Tipos de referencia

Un tipo de referencia almacena una referencia a sus datos. Los tipos de referencia incluyen los siguientes:

  • String

  • Todas las matrices, incluso si sus elementos son tipos de valor

  • Tipos de clase, como Form

  • Delegados

Una clase es un tipo de referencia. Tenga en cuenta que cada matriz es un tipo de referencia, incluso si sus miembros son tipos de valor.

Dado que cada tipo de referencia representa una clase de .NET Framework subyacente, debe usar la palabra clave New Operator al inicializarla. La siguiente instrucción inicializa una matriz.

Dim totals() As Single = New Single(8) {}  

Elementos que no son tipos

Los siguientes elementos de programación no se consideran tipos, ya que no se puede especificar ninguno de ellos como un tipo de datos de un elemento declarado:

  • Espacios de nombres

  • Módulos

  • Events

  • Propiedades y procedimientos

  • Variables, constantes y campos

Trabajo con el tipo de datos Object

Puede asignar un tipo de referencia o un tipo de valor a una variable del tipo de datos Object. Una variable Object siempre contiene una referencia a los datos, nunca los datos en sí. Pero si asigna un tipo de valor a una variable Object, se comporta como si contuviera sus propios datos. Para obtener más información, vea Object Data Type.

Puede averiguar si una variable Object actúa como un tipo de referencia o un tipo de valor si la pasa al método IsReference de la clase Information del espacio de nombres Microsoft.VisualBasic. Information.IsReference devuelve True si el contenido de la variable Object representa un tipo de referencia.

Consulte también