Tipos de valor y tipos de referenciaValue Types and Reference Types

Hay dos tipos de tipos en Visual Basic: tipos de referencia y tipos de valor.There are two kinds of types in Visual Basic: reference types and value types. Las variables de tipos de referencia almacenan referencias en sus datos (objetos), mientras que las variables de tipos de valor contienen directamente los datos.Variables of reference types store references to their data (objects), while variables of value types directly contain their data. 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.With reference types, two variables can reference the same object; therefore, operations on one variable can affect the object referenced by the other 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).With value types, each variable has its own copy of the data, and it is not possible for operations on one variable to affect the other (except in the case of the ByRef modifier on parameters).

Tipos de valorValue Types

Un tipo de datos es un tipo de valor si contiene los datos dentro de su propia asignación de memoria.A data type is a value type if it holds the data within its own memory allocation. Entre los tipos de valor se incluyen los siguientes:Value types include the following:

  • Todos los tipos de datos numéricosAll numeric data types

  • Boolean, Chary DateBoolean, Char, and Date

  • Todas las estructuras, incluso si sus miembros son tipos de referenciaAll structures, even if their members are reference types

  • Las enumeraciones, ya que su tipo subyacente siempre es SByte, Short, Integer, Long, Byte, UShort, UInteger o ULongEnumerations, since their underlying type is always SByte, Short, Integer, Long, Byte, UShort, UInteger, or ULong

Cada estructura es un tipo de valor, incluso si contiene miembros de tipo de referencia.Every structure is a value type, even if it contains reference type members. Por esta razón, las estructuras .NET Framework implementan tipos de valor como Char y Integer.For this reason, value types such as Char and Integer are implemented by .NET Framework structures.

Puede declarar un tipo de valor mediante la palabra clave Reserved, por ejemplo, Decimal.You can declare a value type by using the reserved keyword, for example, Decimal. También puede usar la palabra clave New para inicializar un tipo de valor.You can also use the New keyword to initialize a value type. Esto es especialmente útil si el tipo tiene un constructor que toma parámetros.This is especially useful if the type has a constructor that takes parameters. Un ejemplo de esto es el constructor de Decimal(Int32, Int32, Int32, Boolean, Byte), que crea un nuevo valor de Decimal a partir de los elementos proporcionados.An example of this is the Decimal(Int32, Int32, Int32, Boolean, Byte) constructor, which builds a new Decimal value from the supplied parts.

Tipos de referenciaReference Types

Un tipo de referencia almacena una referencia a sus datos.A reference type stores a reference to its data. Entre los tipos de referencia se incluyen los siguientes:Reference types include the following:

  • String

  • Todas las matrices, incluso si sus elementos son tipos de valorAll arrays, even if their elements are value types

  • Tipos de clase, como FormClass types, such as Form

  • DelegadosDelegates

Una clase es un tipo de referencia.A class is a reference type. Tenga en cuenta que cada matriz es un tipo de referencia, incluso si sus miembros son tipos de valor.Note that every array is a reference type, even if its members are value types.

Puesto que cada tipo de referencia representa una clase de .NET Framework subyacente, debe usar la palabra clave New Operator al inicializarla.Since every reference type represents an underlying .NET Framework class, you must use the New Operator keyword when you initialize it. La siguiente instrucción Inicializa una matriz.The following statement initializes an array.

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

Elementos que no son tiposElements That Are Not Types

Los elementos de programación siguientes no se califican como tipos, ya que no se puede especificar ninguno de ellos como un tipo de datos para un elemento declarado:The following programming elements do not qualify as types, because you cannot specify any of them as a data type for a declared element:

  • Espacios de nombresNamespaces

  • MódulosModules

  • EventsEvents

  • Propiedades y procedimientosProperties and procedures

  • Variables, constantes y camposVariables, constants, and fields

Trabajar con el tipo de datos ObjectWorking with the Object Data Type

Puede asignar un tipo de referencia o un tipo de valor a una variable del tipo de datos Object.You can assign either a reference type or a value type to a variable of the Object data type. Una variable Object siempre contiene una referencia a los datos, nunca los propios datos.An Object variable always holds a reference to the data, never the data itself. Sin embargo, si asigna un tipo de valor a una variable Object, se comporta como si tuviera sus propios datos.However, if you assign a value type to an Object variable, it behaves as if it holds its own data. Para obtener más información, vea Object Data Type.For more information, see Object Data Type.

Puede averiguar si una variable Object está actuando como un tipo de referencia o un tipo de valor pasándola al método IsReference de la clase Information del espacio de nombres Microsoft.VisualBasic.You can find out whether an Object variable is acting as a reference type or a value type by passing it to the IsReference method in the Information class of the Microsoft.VisualBasic namespace. Information.IsReference devuelve True si el contenido de la variable Object representa un tipo de referencia.Information.IsReference returns True if the content of the Object variable represents a reference type.

Vea tambiénSee also