C# Tipos de datos

En C#, las variables se dividen en los siguientes tipos:

  • Tipos de valor (Value types)
  • Tipos de referencia (Reference types)
  • Tipos puntero (Pointer types)

Tipos de valor (Value types)

Las variables de tipo de valor pueden asignarse directamente a un valor. Son de la claseSystem.ValueTypederivadas.

Los tipos de valor contienen datos directamente. Por ejemploint、char、float, almacenan números, caracteres y números de punto flotante, respectivamente. Cuando declara uninttipo, el sistema asigna memoria para almacenar el valor.

La siguiente tabla enumera los tipos de valor disponibles en C# 2010:

TipoDescripciónRangoValor predeterminado
boolValor booleanoTrue o FalseFalse
byteEntero sin signo de 8 bits0 a 2550
charCarácter Unicode de 16 bitsU +0000 a U +ffff'\0'
decimalValor decimal exacto de 128 bits, 28-29 dígitos significativos(-7.9 x 1028a 7.9 x 1028) / 100 a 28 0.0M
doubleTipo de punto flotante de doble precisión de 64 bits(+/-)5.0 x 10-324a (+/-)1.7 x 103080.0D
floatTipo de punto flotante de precisión simple de 32 bits-3.4 x 1038a + 3.4 x 10380.0F
intTipo de entero con signo de 32 bits-2,147,483,648 a 2,147,483,6470
longTipo de entero con signo de 64 bits-9,223,372,036,854,775,808 a 9,223,372,036,854,775,8070L
sbyteTipo de entero con signo de 8 bits-128 a 1270
shortTipo de entero con signo de 16 bits-32,768 a 32,7670
uintTipo de entero sin signo de 32 bits0 a 4,294,967,2950
ulongTipo de entero sin signo de 64 bits0 a 18,446,744,073,709,551,6150
ushortTipo de entero sin signo de 16 bits0 a 65,5350

Para obtener el tamaño exacto de un tipo o una variable en una plataforma específica, puede usar elsizeofmétodo. La expresiónsizeof(type)produce el tamaño de almacenamiento, en bytes, de un objeto o tipo. El siguiente ejemplo obtiene en cualquier máquina elinttamaño de almacenamiento del tipo:

Ejemplo

using System;

namespace DataTypeApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine("Size of int: {0}", sizeof(int));
         Console.ReadLine();
      }
   }
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

Size of int: 4

Tipos de referencia (Reference types)

Los tipos de referencia no contienen los datos reales almacenados en la variable, pero contienen referencias a las variables.

En otras palabras, se refieren a una ubicación de memoria. Cuando se usan múltiples variables, un tipo de referencia puede apuntar a una ubicación de memoria. Si los datos en la ubicación de memoria son modificados por una variable, las otras variables reflejarán automáticamente este cambio de valor.Los tipos de referenciaintegrados son:object、dynamicystring。

Tipo objeto (Object)

Tipo objeto (Object)es la clase base definitiva de todos los tipos de datos en el Sistema de Tipos Comunes (Common Type System - CTS) de C#. Object es un alias de la clase System.Object. Por lo tanto, el tipo objeto (Object) puede asignarse a valores de cualquier otro tipo (tipos de valor, tipos de referencia, tipos predefinidos o tipos definidos por el usuario). Sin embargo, antes de asignar un valor, se debe realizar una conversión de tipos.

Cuando un tipo de valor se convierte a un tipo objeto, se denominaboxing; por otro lado, cuando un tipo objeto se convierte a un tipo de valor, se denominaunboxing。

object obj;
obj = 100; // 这是装箱

Tipo dinámico (Dynamic)

Puede almacenar valores de cualquier tipo en variables de tipo de datos dinámico. La comprobación de tipos de estas variables ocurre en tiempo de ejecución.

Sintaxis para declarar un tipo dinámico:

dynamic <variable_name> = value;

Por ejemplo:

dynamic d = 20;

El tipo dinámico es similar al tipo objeto, pero la comprobación de tipos de las variables de tipo objeto ocurre en tiempo de compilación, mientras que la comprobación de tipos de las variables de tipo dinámico ocurre en tiempo de ejecución.

Tipo de cadena (String)

Tipo de cadena (String)Permite asignar cualquier valor de cadena a una variable. El tipo de cadena (String) es un alias de la clase System.String. Se deriva del tipo objeto (Object). Los valores del tipo de cadena (String) pueden asignarse de dos formas: comillas y @comillas.

Por ejemplo:

String str = "example.com";

Una cadena con @comillas:

@"example.com";

En C#, la cadena string puede ir precedida de @ (llamada "cadena textual" o "verbo string") para tratar los caracteres de escape (\) como caracteres ordinarios, por ejemplo:

string str = @"C:\Windows";

Equivale a:

string str = "C:\\Windows";

En las cadenas @, se pueden hacer saltos de línea arbitrarios; los caracteres de nueva línea y los espacios de sangría se cuentan dentro de la longitud de la cadena.

string str = @"<script type=""text/javascript"">
    <!--
    -->
</script>";

Los tipos de referencia definidos por el usuario son: class, interface o delegate. Discutiremos estos tipos en capítulos posteriores.

Tipo puntero (Pointer types)

Las variables de tipo puntero almacenan la dirección de memoria de otro tipo. Los punteros en C# tienen la misma funcionalidad que los punteros en C o C++.

Sintaxis para declarar un tipo puntero:

type* identifier;

Por ejemplo:

char* cptr;
int* iptr;

Discutiremos los tipos puntero en el capítulo "Código no seguro".

Otras extensiones