Nuevos tipos de datos en Visual Studio 2005 de y en Visual Studio. NET

Seleccione idioma Seleccione idioma
Id. de artículo: 311327 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Este artículo describe los nuevos tipos de datos que están disponibles en Microsoft Visual Studio 2005 y Microsoft Visual Studio .NET y las diferencias entre el nuevo de Visual Studio 2005 y tipos de datos de Visual Studio. NET y los tipos de datos de Microsoft Visual Basic 6.0. Además, en este artículo se explica cómo puede utilizar el tipo de objeto para lograr la funcionalidad del tipo Variant .

En Visual Studio 2005 de y en Visual Studio. NET, common language runtime proporciona las clases base que incluyen tipos de datos básicos, las clases de colección y otras clases en generales. El sistema de tipos común establece la base fundamental para la compatibilidad con varios idiomas.

Anteriormente, cada lenguaje de programación representa los tipos de datos a su manera. Ahora, el sistema de tipos común proporciona todos los idiomas, en 2005 de Visual Studio y Visual Studio. NET, con un conjunto básico de tipos de datos. Cada tipo de datos se deriva de la clase System.Object . Además, cada tipo de datos es compatible con un conjunto mínimo de métodos. Como todos los lenguajes utilizan la misma biblioteca de tipos, puede llamar un lenguaje de otro sin tener que convertir el tipo o las convenciones de llamada.

Además, el entorno de tiempo de ejecución de .NET está diseñado para ser seguro. El entorno de tiempo de ejecución de .NET impone reglas estrictas para garantizar la seguridad de tipos. La especificación de lenguaje común define un conjunto de reglas comprobables mediante programación. Estas normas rigen la interoperación de los tipos que se crearon en diferentes lenguajes de programación. Estas reglas también establecen los requerimientos de cumplimiento de Common Language Specification. 2005 de Visual Studio y Visual Studio .NET de lenguajes como Microsoft Visual Basic 2005, Microsoft Visual Basic. NET, Microsoft Visual C# 2005 y Microsoft Visual C# .NET cumplen con Common Language Specification.

Más información

Microsoft .NET incluye dos clases de tipos de datos:
  • Tipos de valor. Tipos que se asignan en una pila o en línea en astructure.
  • Tipos de referencia. Tipos que se asignan en un montón.
Tipos de valor y tipos de referencia se derivan de la clase base, System.Object.

Cuando se necesita un tipo de valor que se comportan como un objeto, un contenedor que hace que el tipo de valor parezca un objeto de referencia se asigna en el montón. Posteriormente, el valor del tipo de valor se copia en el contenedor. El contenedor se marca para que el sistema sepa que el contenedor contiene un tipo de valor. Este proceso se conoce como conversión boxing y el proceso inverso se conoce como conversión unboxing. Conversiones boxing y unboxing permiten tratar como un objeto de cualquier tipo.

Tipos de valor

Tipos de valor almacenan los datos directamente en la pila. Puede tener acceso a estos datos directamente. Para crear una copia del valor que se asigna, puede asignar un tipo de valor a una variable. Tipos de valor no son heredables. Se derivan implícitamente de la clase System.ValueType , que se deriva de System.Object.

Tipos de valor incluyen tipos primitivos, los enumeradores y estructuras.

Tipos primitivos

Primitivos son la base de los tipos de datos. Primitivos son los tipos más bajos disponibles. Puede identificar a primitivas mediante palabras clave, que son alias de tipos predefinidos en el espacio de nombres System . Por ejemplo, en Visual Basic 2005 y Visual Basic. NET, el tipo de datos entero es un alias para el objeto System.Int32 .

Dado que todos los tipos de datos se deriva de System.Object, primitivos son realmente objetos con un conjunto de miembros que están disponibles para cada tipo. Por ejemplo, el tipo de datos Integer tiene un miembro denominado MaxValue.

Visual Basic 2005 y Visual Basic .NET definen los tipos primitivos siguientes:
Contraer esta tablaAmpliar esta tabla
NombreObjetoDescripciónValor predeterminado
ByteSystem.Byteentero sin signo de 1 byte0
CortoSystem.Int16entero de 2 bytes con signo0
EnteroSystem.Int32entero de 4 bytes con signo0
LargoSystem.Int64entero de 8 bytes con signo0
ÚnicoSystem.Singlepunto flotante de 4 bytes0
DobleSystem.Doublepunto flotante de 8 bytes0
DecimalSystem.Decimaldecimal de 16 bytes0D
Valor booleanoSystem.BooleanTrue o FalseFalse
FechaSystem.DateTimeMarca de tiempo de fecha# 01/01/0001 12:00:00 AM #
CharSystem.CharCarácter unicode únicoChrW(0)
CadenaSystem.StringVarios caracteres unicodereferencia nula
De estos tipos primitivos, sólo el tipo String es un tipo de referencia. Todos los demás tipos primitivos son tipos de valor.

La lista siguiente describen algunas de las diferencias entre los tipos de datos en Visual Basic 2005 en Visual Basic .NET y en Visual Basic 6.0:
  • En Visual Basic 2005 y Visual Basic. NET, el tipo de datos Short es equivalente al tipo de datos Integer de Visual Basic 6.0.
  • En Visual Basic 2005 y Visual Basic. NET, el tipo de datos entero es equivalente al tipo de datos Long de Visual Basic 6.0.
  • En Visual Basic 2005 y Visual Basic. NET, el tipo de datos Long es de 64 bits.
  • En Visual Basic 2005 y en Visual Basic. NET, el compilador admite directamente el tipo de datos Decimal . En Visual Basic 6.0, porque Decimal es un subtipo de variante, no puede declarar un tipo sea Decimal.
  • Dado que Visual Basic 2005 y Visual Basic .NET no admite el tipo de datos moneda de Visual Basic, utilice el tipo de datos Decimal para esta funcionalidad.
  • Dado que Visual Basic 2005 y Visual Basic .NET son compatibles con la cadena de longitud fija de Visual Basic, utilice una clase de compatibilidad para thisfunctionality.
  • En Visual Basic 2005 y Visual Basic. NET, el tipo de datos Date no se almacena en un tipo de datos Double . En su lugar, el tipo de datos Date utiliza internamente un tipo entero de 8 bits. Puede usefunctions como el ToOADate y las funciones FromOADate para convertir y hacia atrás.
  • Char y los tipos de datos de cadena utilizan dos bytes para cada carácter.
  • Dado que Visual Basic 2005 y Visual Basic .NET son compatibles con el tipo de datos Variant Visual Basic, utilice el tipo System.Object para esta funcionalidad. Por ejemplo, puede utilizar el tipo deobjeto cuando se declara una variable que puede contener dos differenttypes.

Literales

En general, los literales son los mismos en Visual Basic 2005 y Visual Basic .NET como en Visual Basic 6.0.
  • Para los tipos de datos enteros , utilice los prefijos y los sufijos siguientes:
    • & Prefijo H para la notación hexadecimal.
    • & Prefijo O notación octal.
    • Sufijo de S para el tipo de datos Short .
    • El sufijo para el tipo de datos entero .
    • Sufijo L para el tipo de datos Long .
    Por ejemplo:
    14, 3S, 70I, 53L & H000B
  • Para tipos de datos de punto flotante, utilice los siguientes sufijos:
    • El tipo de datos único sufijo F.
    • Sufijo de R para el tipo de datos Double .
    • Sufijo de D para el tipo de datos Decimal .
  • Para el tipo de datos Char , utilice el sufijo c. Por ejemplo:
    "A" c

Declaración de

En Visual Basic 2005 y Visual Basic. NET, puede declarar una nueva variable y asignar un valor inicial al mismo tiempo. Por ejemplo:
Dim MyInt As Integer = 25
Dim OtherInt As Integer = MyInt * 100
				
Múltiples variables en la misma línea son del mismo tipo. Por ejemplo, la instrucción siguiente, MyVar1 es un tipo de datos Variant en Visual Basic 6.0, pero un tipo de datos String en Visual Basic 2005 y en Visual Basic. NET:
Dim MyVar1, MyVar2 As String
				
Se pueden incluir diferentes tipos en una declaración en la misma línea para que la siguiente declaración sigue siendo válida en Visual Basic 2005 y en Visual Basic. NET:
Dim x as Integer, y as String
				
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
311331 El comportamiento de los cambios de la declaración de variables en Visual Basic 2005 y Visual Basic .NET

Ámbito de aplicación

En Visual Basic 6.0, puede declarar una variable en cualquier lugar dentro de un procedimiento. La variable tiene ámbito de procedimiento completo independientemente de donde se encuentra la declaración. Esto permite el que acceso a la variable en cualquier lugar dentro del mismo procedimiento. Si la variable se declara dentro de un bloque como un bucle , un bucle Do o un bloque If , todavía puede tener acceso a la variable fuera del bloque.

Este comportamiento cambia en Visual Basic 2005 y en Visual Basic. NET. Si se declara una variable en un bloque, la variable sólo está disponible dentro de ese bloque. Por lo tanto, la variable sólo tiene ámbito de bloque en Visual Basic 2005 y en Visual Basic. NET. Un bloque se define como un conjunto de instrucciones que terminan con un extremo, un bucleo una instrucción Next .

Bloquear obras de ámbito diferente ámbito de procedimiento. En el ámbito de bloque, si se declara una variable dentro de un bloque, la variable no pierde su valor cuando sale del bloque. El valor sigue estando disponible en caso de que necesite volver a especificar el bloque. Sin embargo, no puede hacer referencia a la variable desde fuera del bloque.

Por ejemplo, el código siguiente funciona en Visual Basic 6.0, pero genera un error en Visual Basic 2005 y en Visual Basic. NET:
Dim i As Long
For i = 0 To 10
    Dim multiples As Long
    multiples = i * 3
Next i
MsgBox(multiples)
				
En Visual Basic 2005 y Visual Basic. NET, el error indica que no se ha declarado los variables "múltiples". Este error se produce en la siguiente línea de código porque intenta tener acceso a la variable fuera del bloque Para el próximo :
MsgBox(multiples)
				

Enumeradores

Las enumeraciones son tipos que proporcionan una representación simbólica de un conjunto de valores. Las enumeraciones que el sistema mucho más fácil escribir, leer y mantener porque el código utiliza el nombre simbólico en lugar del valor. Además, las herramientas de depuración muestran el nombre simbólico.

Como todos los enumeradores se hereda de la clase System.Enum (que se hereda de la clase System.ValueType , que a su vez hereda de System.Object), los enumeradores son más símbolos. Los enumeradores son tipos de valor que tienen su propio conjunto de métodos.

Puede asignar un valor determinado a miembros de la enumeración utilizando el signo igual (=). Si no se inicializa el primer miembro en un valor, el miembro se le asigna un valor de cero. Si no se inicializan los miembros restantes, se les asigna el valor del miembro anterior más uno.

Los enumeradores son establecimiento inflexible de tipos. Puede ser un Byte, Short, un enteroo un tipo de datos Long . Si no se proporciona un tipo de datos, el enumerador utiliza el tipo de datos Integer de manera predeterminada.

Dos de las declaraciones siguientes son válidos en Visual Basic 2005 y en Visual Basic. NET:
Public Enum MyColor as Integer   
	Red = 0
	Green = 1
	Blue = 2
	Orange = 3
End Enum
				
Public Enum MyColor
	Red                       
	Green
	Blue
	Orange
End Enum
				

Estructuras

El tipo de datos de estructura reemplaza el tipo definido por el usuario (UDT) de Visual Basic 6.0. El tipo de datos de estructura hereda de la clase System.ValueType . La lista siguiente describe algunas de las diferencias entre el tipo de datos de la estructura y el tipo definido por el usuario:
  • A diferencia de los casos, el tipo de datos de estructura no se limita a 64kilobytes.
  • A diferencia de los casos, las estructuras pueden contener métodos, implementinterfaces y declarar eventos.
En Visual Basic 2005 y Visual Basic. NET, el tipo de datos de la estructura es muy similar a una clase de tipo de datos, excepto en que un tipo de datos de estructura es un tipo de valor (mientras que un tipo de datos de clase es un tipo de referencia). Para incrementar la eficiencia, es aconsejable utilizar tipos de datos estructurados, si no necesita la sobrecarga de mantener un puntero de referencia. Sin embargo, dado que un tipo de datos de estructura es un tipo de valor, no es recolectado.

Tipos de referencia

Tipos de referencia almacenan los datos en el montón en tiempo de ejecución y almacenan un puntero a los datos en la pila. Como resultado, un tipo de referencia está sujeto a la recolección.

Sólo puede tener acceso a los datos de los tipos de referencia a través del puntero de referencia. Para copiar la referencia en lugar de los datos reales, puede asignar una variable al tipo de referencia. Por lo tanto, cada vez que el código hace referencia a cualquier miembro de un objeto en el montón, código debe generarse y ejecutarse para desreferenciar el puntero para llevar a cabo las acciones necesarias. Esto puede afectar al rendimiento.

Tipos de referencia incluyen los siguientes tipos de datos:
  • Cadena
  • Arreglo de discos
  • Clase
  • Interfaz
  • Delegado

Cadena

Aunque pueden parecer que los tipos de datos String es el mismo en Visual Basic 2005 y Visual Basic .NET que se encuentran en Visual Basic 6.0, los tipos de datos de Visual Basic 2005 y Visual Basic .NET cadena son invariables.

Dado que los tipos de datos de cadena son de sólo lectura después de la inicialización, no se puede modificar directamente su contenido. La variable de cadena contiene un puntero a la memoria que contiene los datos reales. Cualquier modificación de la cadena desasigna el bloque de memoria actual y asigna un nuevo bloque de memoria para el nuevo valor. Por ejemplo:
Dim strS as String
strS="Hello"           'Allocates memory for "Hello".
strS=strS & " World"   'Deallocates memory for "Hello" and reallocates memory for "Hello World".
				
Visual Basic 6.0 asigna memoria de la cadena de la misma manera. Sin embargo, en Visual Basic 6.0 y versiones anteriores, puede modificar directamente el contenido de la memoria de la cadena mediante la instrucción Mid . Por ejemplo:
Dim strS as String
strS="Hello World"
Mid(strS, 7,5)="There"
				
En Visual Basic 2005 y Visual Basic. NET, la instrucción Mid opera a través de concatenación. La instrucción Mid no modifica directamente la memoria de la cadena. En su lugar, la instrucción Mid desasigna y reasigna memoria al igual que todas las operaciones de cadena.

Las listas siguientes describen las ventajas y desventajas de un tipo de datos de cadena invariable.

Ventajas de la invariabilidad
  • Dado que no puede cambiar el valor de un búfer de cadena, puede copiar una cadena con sólo copiar el puntero. Cualquier código que intente la cadena modifythe se asignar nueva memoria y deje el valor anterior como está. Cuando novariable apunta a la memoria de la cadena, el recolector de elementos no utilizados se limpiar la memoria de thestring.
  • Cuando se modifica un búfer en un entorno multiproceso, debe bloquear el contenido para evitar la competencia con otro subproceso. Proceso de Thislocking produce una sobrecarga de rendimiento. Sin embargo, dado que stringvariables son invariables en Visual Basic 2005 y en Visual Basic. NET, la memoria de búfer que señala es de sólo lectura y no requiere el bloqueo. Por lo tanto, lo hace no impactperformance.
Desventajas de la invariabilidad
  • Es costoso desasignar y reasignar la memoria de la cadena, especialmente si hay muchas concatenaciones.
Nota Si el costo de cancelar la asignación y reasignación de cadena en gran medida afecta al rendimiento, puede utilizar la clase StringBuilder en Visual Basic 2005 y en Visual Basic. NET. La clase StringBuilder utiliza las ventajas de la instrucción Mid de Visual Basic 6.0. Observe las ventajas de rendimiento de aproximadamente 300 concatenaciones de cadenas.

Arreglo de discos

Todos los tipos de matriz heredan implícitamente de la clase System.Array , que se hereda de System.Object. Las matrices se asignan en el montón administrado. En Visual Basic 6.0, puede utilizar las matrices "Option Base" de 0 ó 1 en función. En Visual Basic 2005 y Visual Basic. NET, las matrices son basado en 0. En realidad, una matriz en la que se declara como tamaño 10 tiene 11 elementos de 0 a 10.
  • Si todas las dimensiones de la matriz son cero, el arrayhas una longitud de cero y la matriz está vacía.
  • Si la matriz está formada por los tipos de referencia, cada arrayelement se inicializa en null.
  • Si la matriz está formada por valor de tipos de la areinitialized de los miembros en el valor predeterminado para su tipo (es decir, miembros de tipo entero se inicializan en cero).
  • Visual Basic .NET permite matrices de matrices. Por ejemplo:
    Dim Sales()() As Double = New Double(11)() {}         ' Allocate top-level array.
    Dim Month As Integer                                  ' Counter variable for month. 
    Dim Days As Integer                                   ' Days in given month for this year. 
    For Month = 0 To 11
        Days = DateTime.DaysInMonth(Year(Now), Month + 1) ' Get number of days. 
                Sales(Month) = New Double(Days - 1) {}    ' Assign array for this month. 
    Next Month
    Sales(2)(3) = 1234.56                                 'Assign value for March 4.
    Debug.WriteLine(Sales(2)(3).ToString)
    					
  • Puede inicializar matrices durante la declaración.
  • Al heredar de System.Array, cada tipo de referencia de matriz hereda automáticamente un conjunto de métodos System.Array y propiedades como el rango, la longitud, GetLengthy GetUpperBound.
  • En Visual Basic 6.0, puede utilizar la instrucción ReDim para redimensionar una variable para que la variable tiene diferente número de índices. Sin embargo, no puede hacerlo en Visual Basic 2005 o en Visual Basic. NET.Las siguientes instrucciones de Visual Basic 6.0 ya no funcionan en Visual Basic 2005 o en Visual Basic. NET:
    Dim MyArray( ) as Integer
    Redim MyArray(5,3)
    						
    Si intenta utilizar cualquiera de estas instrucciones, recibirá un mensaje de error siguientes:
    'Redim' no puede cambiar el número de dimensiones de una matriz.
    Para resolver este problema, cambiar el anterior código como sigue:
    Dim MyArray(,) as Integer
    Redim MyArray(5,3)
    					
  • Visual Basic 2005 y Visual Basic .NET todavía admiten la instrucción Erase . La instrucción Erase crea una matriz vacía sin ordimensions de fila.

Clase

Una clase es una estructura de datos que puede contener miembros de datos (por ejemplo, las variables y constantes), miembros de función (por ejemplo, métodos, propiedades, indizadores, operadores, eventos y constructores) y tipos anidados. Los tipos de clase admiten la herencia. La herencia es un mecanismo mediante el cual una clase derivada puede extender y especializar una clase base.

Como una mejora significativa de Visual Basic 6.0, Visual Basic 2005 y Visual Basic .NET son lenguajes de programación orientados a objetos es true. Visual Basic 2005 y Visual Basic .NET admiten la herencia de implementación, ya que permite definir clases que sirvan como base para las clases derivadas. Las clases derivadas heredan y pueden extender las propiedades y los métodos de la clase base. Las clases derivadas también pueden reemplazar métodos heredados con nuevas implementaciones.

Interfaz

Una interfaz es un contrato. Una clase o una estructura que implementa la interfaz debe ceñirse al contrato. El contrato especifica a los miembros que deben proporcionar la clase que implementa la interfaz. La interfaz es una lista de funciones. La interfaz contiene métodos Sub o Function , propiedades y eventos. Sin embargo, la interfaz no proporciona una implementación propia.

Visual Basic 6.0 puede utilizar interfaces, pero no se puede crear directamente. Para evitar este comportamiento, puede crear una clase vacía y se implementan como lo haría con una interfaz. Sin embargo, esta técnica puede ser difícil y puede correr el riesgo accidental implementación de la clase de interfaz.

Como una mejora significativa de Visual Basic 6.0, Visual Basic 2005 y Visual Basic .NET proporcionan la declaración formal de la interfaz y utilizar la versión mejorada de la palabra clave Implements para implementar interfaces. Visual Basic 2005 y Visual Basic .NET admiten la herencia de la interfaz, ya que permite definir interfaces que sirven como contratos o protocolos, que deben ser implementados por clases que heredan de las interfaces.

Delegado

Visual Basic 2005 y Visual Basic .NET introducen el tipo de referencia de delegado. El tipo de referencia de delegado es fundamental para el modelo de programación de common language runtime.

Los delegados son clases que contienen referencias a procedimientos. Son similares a un puntero a función de C o C++. Sin embargo, en C o C++, la dirección de una función es sólo una dirección de memoria. No hay información adicional está asociada con esta dirección, como el número o el tipo de argumentos. Por lo tanto, una C o un puntero a función C++ no es seguro. Puesto que el.NET Framework proporciona un entorno de seguridad de tipos, proporciona un puntero a función con seguridad de tipos, administrada, que es el tipo de delegado.

Un delegado se deriva de la clase System.Delegate . Aunque un puntero a función puede referencia sólo funciones compartidas, un delegado pueden hacer referencia tanto compartidos y métodos de instancia. Para un método de instancia, el delegado almacena una referencia no sólo al punto de entrada del método, sino también a la instancia de objeto.

El modelo de eventos en Visual Basic 2005 y Visual Basic .NET utiliza a delegados para enlazar eventos a los métodos que se utilizan para controlarlos. El delegado permite que otras clases para registrarse para la notificación de eventos mediante la especificación de un método de controlador. Cuando se produce el evento, el delegado llama a su método enlazado.

Conversión de tipos

Hay dos tipos de conversión:
  • La conversión implícita. Conversión implícita es transparente para los usuarios. El compilerautomatically se convierte de un tipo de datos a otro. El predefinidas, implicitconversions siempre tienen éxito y nunca causan un error.
  • Conversión explícita. Llama a las conversiones explícitas en el código. Explicit proyecta cannotguarantee éxito y puede perder información si se convierte de un tipo mayor a tipo de otra.

Conversión boxing y Unboxing

En algunos casos, puede que desee tratar a una instancia de un tipo de valor como una instancia de un tipo de referencia. Conversión boxing proporciona este mecanismo.

Conversión boxing convierte un tipo de valor en un tipo de referencia realizando los siguientes pasos:
  1. Asigna memoria en el montón administrado para almacenar el valor.
  2. Copia el valor en el montón administrado.
  3. La referencia a los datos (dirección del objeto) se almacena en la pila.
Unboxing convierte una instancia de un tipo de referencia a su tipo de valor original mediante la devolución de un puntero a los datos de un sujeto en caja. El puntero no incluye la sobrecarga generalmente asociado a un objeto real.

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):
Introducción a la biblioteca de clases de.NET Framework
http://msdn.Microsoft.com/en-us/library/aa720713.aspx

Sistema de tipos común
http://msdn.Microsoft.com/en-us/library/aa720708.aspx

¿Qué es Common Language Specification?
http://msdn.Microsoft.com/en-us/library/aa735713.aspx

Propiedades

Id. de artículo: 311327 - Última revisión: lunes, 03 de marzo de 2014 - Versión: 5.0
La información de este artículo se refiere a:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Professional
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
Palabras clave: 
kbvs2005swept kbvs2005applies kbinfo kbmt KB311327 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 311327

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com