C# cuenta con 16 tipos predefinidos integrados, divididos en 13 tipos simples y 3 tipos no simples. Todos los nombres de los tipos predefinidos se escriben completamente en minúsculas.
graph TD
A[Tipos predefinidos] --> B[Simples]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[No numéricos]
B --> G[Numéricos]
F --> H[bool]
F --> I[char]
G --> J[Enteros]
G --> K[Coma flotante]
J --> L[8 bits]
J --> M[16 bits]
J --> N[32 bits]
J --> O[64 bits]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% Nodos hoja en verde
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee90
13 tipos simples
- Tipos numéricos (11 en total): 8 variantes de entero
sbyte/byte, short/ushort, int/uint, long/ulong; 3 de coma flotantefloat, double, decimal(decimal diseñado exclusivamente para cálculos monetarios de alta precisión) - Tipos no numéricos (2 en total):
char(carácter Unicode individual),bool(solo valores true o false)
Característica: a diferencia de C/C++, los valores numéricos en C# no se pueden usar directamente como condición booleana.
3 tipos de referencia no simples
string (secuencia de caracteres), object (clase base de todos los tipos), dynamic (interoperabilidad con lenguajes dinámicos)
Tipos C# y tipos .NET
Cada tipo predefinido se mapea directamente a un tipo subyacente de .NET. Las palabras clave de tipo de C# son solo alias de sus correspondientes tipos .NET. El código compila correctamente si usas los nombres completos de las clases .NET, pero las guías oficiales de estilo lo desaconsejan. Al escribir código C#, prioriza los alias de palabra clave nativos de C# sobre los nombres completos de clase de .NET.
Tipos simples predefinidos
| Palabra clave C# | Descripción | Rango de valores | Tipo subyacente .NET | Valor por defecto |
|---|---|---|---|---|
| sbyte | Entero con signo de 8 bits | -128 ~ 127 | System.SByte | 0 |
| byte | Entero sin signo de 8 bits | 0 ~ 255 | System.Byte | 0 |
| short | Entero con signo de 16 bits | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | Entero sin signo de 16 bits | 0 ~ 65535 | System.UInt16 | 0 |
| int | Entero con signo de 32 bits | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | Entero sin signo de 32 bits | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | Entero con signo de 64 bits | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | Entero sin signo de 64 bits | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | Coma flotante de precisión simple | 1,5×10⁻⁴⁵ ~ 3,4×10³⁸ | System.Single | 0.0f |
| double | Coma flotante de doble precisión | 5×10⁻³²⁴ ~ 1,7×10³⁰⁸ | System.Double | 0.0d |
| bool | Tipo booleano | true / false | System.Boolean | false |
| char | Carácter Unicode | U+0000 ~ U+FFFF | System.Char | \x0000 (carácter nulo) |
| decimal | Decimal de alta precisión (28 dígitos significativos) | ±1,0×10⁻²⁸ ~ ±7,9×10²⁸ | System.Decimal | 0m |
Tipos no simples predefinidos
| Palabra clave C# | Descripción | Tipo subyacente .NET |
|---|---|---|
| object | Clase base de todos los tipos, incluidos los tipos valor simples | System.Object |
| string | Cadena formada por cero o más caracteres Unicode | System.String |
| dynamic | Tipo dinámico para compatibilidad con ensamblados de lenguajes dinámicos | No existe un tipo .NET fijo asociado |
int es completamente equivalente a System.Int32 y string coincide con System.String; el compilador los reconoce y convierte mutuamente de forma automática.
Las normas de codificación recomiendan encarecidamente usar las palabras clave nativas de C# (usa int en lugar de Int32) para mejorar la legibilidad del código.
Los tipos simples también se conocen como Tipos Valor (Value Type)
Almacenan un único valor y se asignan en la memoria de pila;
Si se declaran sin asignación manual, reciben automáticamente el valor por defecto indicado en la tabla;
Todos los tipos simples heredan directamente de object y admiten operaciones de empaquetado y desempaquetado (se explicará más adelante).
Familia de enteros
- Tipos con prefijo
u(uint/ushort/ulong/byte): sin signo, solo almacenan números no negativos; - sbyte/short/int/long: con signo, admiten enteros positivos y negativos.
Familia de coma flotante
float: precisión simple, sufijof. Menor precisión pero cálculos rápidos, ideal para gráficos y renderizado 3D;double: doble precisión, sufijod. Tipo literal flotante por defecto, para cálculos científicos generales;decimal: decimal de alta precisión, sufijom. Diseñado para finanzas y divisas sin pérdida de precisión en coma flotante.
Tipo booleano y tipo carácter
bool: solo dos valores posibles, no se permite conversión implícita entre números y booleanos;char: almacena un único carácter Unicode, representado internamente como entero sin signo de 16 bits.
Tipos no simples (Tipos de referencia Reference Type)
- object: clase base raíz. Todos los tipos valor y referencia derivan de él, pieza central del mecanismo de empaquetado;
- string: tipo de referencia especial inmutable. La cadena vacía
""es una instancia por defecto válida; - dynamic: sin comprobación de tipos en tiempo de compilación, resuelve miembros en tiempo de ejecución. Sin mapeo .NET fijo, usado principalmente para integrar lenguajes dinámicos como Python/Ruby; sacrifica seguridad de compilación a cambio de flexibilidad.
static void Main(string[] args)
{
// 1. Enteros de 8 bits
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. Enteros de 16 bits
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. Enteros de 32 bits
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. Enteros de 64 bits
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. Tipos de coma flotante
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. Tipo booleano
bool flag = true;
// 7. Carácter Unicode
char ch = 'A';
// 8. Tipos predefinidos no simples
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Lenguaje del código: C# (cs)
Tipos integrados