CSharp

Tutorial CSharp: Tipos de datos

CSharp tipos de datos: definición y ejemplos. Aprende a definir y usar tipos de datos en CSharp con ejemplos prácticos y detallados.

Aprende CSharp GRATIS y certifícate

En C#, un tipo de datos indica el tipo de valor que una variable puede almacenar. Los tipos de datos son fundamentales en la creación de un programa, ya que ayudan a modelar la información con la que el programa interactuará.

C# es un lenguaje de programación fuertemente tipado. Esto significa que cada variable y constante tiene un tipo, así como cada expresión que se evalúa tiene un tipo. Todos los tipos de asignación, ya sea por asignación o por inicialización, se comprueban para garantizar su compatibilidad.

En C#, los tipos de datos se dividen en tres categorías principales:

  1. Tipos de valor (Value types)
  2. Tipos de referencia (Reference types)
  3. Tipos puntero (Pointer types)

Además de estos, también existe el tipo void, que se usa para denotar que un método no devuelve ningún valor.

Tipos en C#

Tipos de valor (Value types)

Cuando se asigna un nuevo valor a una variable de tipo de valor, se crea una copia física de ese valor, y cualquier modificación no afecta al dato original. C# proporciona varios tipos de valor predefinidos.

// Tipos de valor más utilizados
int i = 123; // Número entero
double d = 12.3; // Número de doble precisión (decimal)
bool b = true; // Booleano (true / false)
char c = 'a'; // Carácter

Otros tipos de valor básicos en C# incluyen:

// Números enteros, diferenciados por tamaño en memoria
byte valByte = 255; // 1 byte de memoria
short valShort = 32767; // 2 bytes de memoria
int valInt = 2147483647; // 4 bytes de memoria
long valLong = 9223372036854775807; // 8 bytes de memoria

// Números en coma flotante
float valFloat = 1.5F; // Precisión simple, 4 bytes de memoria
double valDouble = 1.5D; // Precisión doble, 8 bytes de memoria

// Número decimal
decimal valDecimal = 1.5M; // Mayor precisión y rango menor, 16 bytes de memoria

// Booleano (true / false)
bool valBool = true;

// Carácter unicode
char valChar = 'a';

Existen otros tipos de valor, como estructuras y enumeraciones. Todos estos tipos de datos se almacenan en la pila (stack) y la variable directamente contiene el valor.

Tipos de referencia (Reference types)

Los tipos de referencia no contienen el dato actual almacenado en una variable, sino que contienen una referencia a los datos. Es posible que múltiples variables puedan referirse a un mismo objeto de memoria único. Si el objeto de memoria se cambia por una de las variables, los cambios también serían visibles para las otras. Los tipos de referencia se almacenan en el heap. C# tiene varios tipos de referencia predefinidos como object, dynamic, y string.

object obj = "Hola mundo"; // Object
dynamic dyn = 20.5; // Dynamic
string str = "Hola mundo"; // Cadena de caracteres

Tipos puntero (Pointer types)

C# tiene la capacidad de utilizar punteros, pero sólo en un contexto "inseguro", no recomendado. En general, C# abstrae el manejo de la memoria para evitar los errores comunes que se producen cuando se utilizan punteros, como la corrupción de la memoria y las fugas de memoria. Sin embargo, en ciertos casos, es posible que se quiera utilizar punteros por razones de eficiencia.

unsafe // No recomendado
{
   int var = 20;
   int* p = &var;
   Console.WriteLine("Data at the location pointed by p: {0}", *p);
}

Conversión de tipos

La conversión de tipos es el proceso de convertir un tipo de dato en otro. C# soporta dos tipos de conversión:

  1. Conversión implícita: Estas conversiones se realizan por el compilador de C# sin necesidad de intervención del programador. Por ejemplo, es posible convertir un int a long ya que hay una garantía de que no habrá pérdida de datos. Esto se debe a que un long tiene mayor tamaño que un int.

    int i = 100;
    long l = i; // Conversión implícita, no se requiere ningún operador de casting
    Console.WriteLine(l); // 100
    
  2. Conversión explícita (casting): Estas conversiones se realizan por el programador. Son necesarias cuando podría haber una pérdida de datos durante la conversión, o cuando se están convirtiendo tipos de datos que son incompatibles por defecto. En caso de una conversión exitosa, el compilador no dará ningún error. Por ejemplo, sería necesario para convertir un double a un int, debido a que se podría perder información decimal.

    double d = 123.4;
    int i = (int)d; // Casting explícito, necesario porque podría haber pérdida de datos
    Console.WriteLine(i); // 123, se perdió información
    

Es esencial entender y utilizar correctamente los tipos de datos en C# para asegurar la integridad de los datos y el correcto funcionamiento del programa.

Aprende CSharp GRATIS online

Ejercicios de esta lección Tipos de datos

Evalúa tus conocimientos de esta lección Tipos de datos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de CSharp

Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a CSharp y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender las categorías principales de tipos de datos en C#: valor, referencia y puntero.
  2. Familiarizarse con los tipos de datos más utilizados en C#, como int, double, bool, char, etc.
  3. Entender cómo se almacenan los tipos de valor en la pila y los tipos de referencia en el heap.
  4. Aprender sobre las conversiones de tipos en C#: implícitas y explícitas (casting).
  5. Conocer los conceptos básicos de los punteros en C# y sus implicaciones.