¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

Los tipos de C#

"En C#, todo está tipado"

El término genérico "tipo" agrupa las clases, estructuras, interfaces, enumeraciones y delegados. Estos cinco tipos se describen en la CTS (Common Type System) para que los compiladores de diferentes lenguajes puedan generar código explotable por la CLR (Common Language Runtime). Un programa utiliza diferentes tipos y un ensamblado puede implementar varios tipos.

A continuación se muestran las definiciones resumidas de los diferentes tipos propuestos por C#:

  • El tipo "Clase" es la implementación C# de lo que se ha presentado en los primeros capítulos. La clase evidentemente es el tipo más utilizado en las aplicaciones. El capítulo Creación de clases define de manera precisa la sintaxis de declaración, asignación y uso.

  • El tipo "Estructura" es una herencia del lenguaje C. Antes de la democratización de la programación orientada a objetos, las estructuras eran el medio más común para los desarrolladores para construir sus propios tipos. De momento, nos quedamos con que las estructuras de C# son muy cercanas a las clases y que, cuando se utilizan sabiamente, permiten mejorar el rendimiento de una aplicación. Veremos en el siguiente capítulo que el framework .NET integra la mayor parte de sus tipos "sencillos" en las estructuras. Sepa que las estructuras no existen en Java.

  • El tipo "Interfaz" es muy utilizado en el framework .NET y contribuye a la comunicación entre las clases. Por el momento...

"Todo el mundo hereda de System.Object"

El tipo System.Object es la base directa o indirecta de todos los tipos de .NET, tanto de los existentes como de los que se crean nuevos (la noción de herencia ya se ha abordado en los primeros capítulos). La herencia de Object es implícita y, por tanto, su declaración es inútil. Todos los tipos heredan de sus métodos e incluso pueden sustituir algunos.

Esto es lo que hace System.ValueType que, en la herencia de tipos de .NET, se convierte en la base de la familia "Valores", adaptándose a los métodos de System.Object.

1. Los tipos Valores

La familia "Valores" se divide en dos partes:

  • Las enumeraciones

  • Las estructuras

A su vez, las estructuras se dividen en:

  • Tipos numéricos:

  • Los tipos enteros:

Tipo

Tamaño

sbyte

byte

char

short

ushort

int

uint

long

ulong

Entero con signo de 8 bits

Entero sin signo de 8 bits

Carácter UNICODE 16 bits

Entero con signo de 16 bits

Entero sin signo de 16 bits

Entero con signo de 32 bits

Entero sin signo de 32 bits

Entero con signo de 64 bits

Entero sin signo de 64 bits

  • Los tipos de coma flotante:

Tipo

Precisión

float

double

7 dígitos

15-16 dígitos

  1. El tipo decimal (adaptado a los cálculos financieros):

Tipo

Precisión

decimal

28-29 dígitos

  • Tipo booleano: tipo bool.

  • Estructuras de usuario (son las que usted escribe). Observe que es el único medio de construir tipos Valores, porque la herencia del tipo System.ValueType está prohibida.

De hecho, los tipos "sencillos" enunciados en las tres tablas son alias a las estructuras del espacio System. Así hablamos de tipos valores integrados. Por tanto, se pueden declarar:

  • Indicando el nombre completo de la estructura (ejemplo: System.Int32).

  • Utilizando el alias que tiene asociado en la gramática de C# (ejemplo: int).

Un tipo Valor se debe inicializar antes de utilizarlo. De lo contrario, se producirá un error de compilación. El método más clásico consiste en continuar la definición con el signo de asignación y su valor inicial. También es posible instanciar un tipo Valor con ayuda de la palabra clave new. En este caso, se pasará por el constructor (se verá más adelante) por defecto del tipo. El constructor ajusta el valor a 0 para los tipos numéricos y a false para el tipo booleano....

Ejercicio corregido

1. Enunciado

Crear una aplicación de tipo Consola que servirá de soporte a las siguientes cuestiones:

 Compruebe por programación que el tipo integrado int es el alias del tipo System.Int32.

 Compruebe que int y System.Int32 son de tipo Valor.

 Compruebe que string no es de tipo Valor.

 Muestre en la consola el número de bytes utilizados para almacenar el valor de un tipo int.

2. Corrección

 Seleccione el menú Archivo y después Nuevo proyecto. Indique la información solicitada.

El contenido del archivo fuente generado por el asistente es el siguiente:


using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Threading.Tasks;  
  
namespace Cap3  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
        }  
    }  
}
 

 Compruebe la igualdad de los tipos int y System.Int32 insertando siguiente el código en el Main:


    // Prueba sin instanciación   
    System.Diagnostics.Debug.Assert(  
        typeof(int) == typeof(System.Int32)  
        );  ...