Menu

¿Qué es C#? El lenguaje, .NET, sus versiones y un primer programa

C# es un lenguaje de propósito general con tipado estático, creado por Microsoft, que se ejecuta sobre .NET. Para qué se usa, cómo se relaciona con .NET, qué añadió cada versión y cómo se organiza un programa en C#.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

C# (se pronuncia "C sharp") es un lenguaje de programación de propósito general diseñado en Microsoft por un equipo dirigido por Anders Hejlsberg y publicado por primera vez en 2002. Tiene tipado estático (cada variable tiene un tipo que el compilador comprueba antes de que el programa se ejecute), es orientado a objetos (el código se organiza en clases) y es gestionado (un recolector de basura libera la memoria por ti). El C# moderno también toma mucho de la programación funcional: lambdas, consultas LINQ, pattern matching y records inmutables.

Aquí tienes un programa completo en C#. Pulsa Run:

Salida:

Hello, Ada! It is 2026.

Para qué se usa C#

C# es un lenguaje de propósito general, así que aparece en casi cualquier tipo de software, pero unas pocas áreas concentran la mayor parte:

  • Juegos. Unity, uno de los motores de juego más usados, se programa en C#. Godot también lo admite.
  • Backends web. ASP.NET Core es el framework web de .NET para API, sitios web y aplicaciones en tiempo real. Es uno de los frameworks web más rápidos entre los más extendidos en las pruebas de rendimiento públicas.
  • Aplicaciones de escritorio. WPF y Windows Forms en Windows, .NET MAUI y Avalonia en varias plataformas.
  • Nube y servicios. Azure Functions, procesos en segundo plano, microservicios en contenedores.
  • Herramientas y automatización. Herramientas de línea de comandos, scripts de compilación, procesamiento de datos.

Es especialmente habitual en empresas que funcionan con tecnología de Microsoft y en estudios de videojuegos. Las aplicaciones móviles son posibles con .NET MAUI (el sucesor de Xamarin), pero es un nicho más pequeño que Kotlin o Swift.

C# y .NET no son lo mismo

C# es el lenguaje. .NET es la plataforma que lo ejecuta, y tiene tres partes:

  1. El runtime (CLR). El compilador de C# no produce código máquina. Produce Intermediate Language (IL), guardado en archivos .dll o .exe. Cuando el programa se ejecuta, el Common Language Runtime compila ese IL a código nativo justo a tiempo (JIT), gestiona la memoria con un recolector de basura e impone la seguridad de tipos.
  2. La biblioteca de clases base. Colecciones, acceso a archivos, red, texto, fechas, hilos: todo lo que hay bajo System.*.
  3. El SDK. El comando dotnet, que crea, compila, prueba y ejecuta proyectos.

Otros lenguajes compilan al mismo IL (F#, Visual Basic), y por eso un programa en C# puede usar una biblioteca escrita en F#.

La plataforma tiene dos generaciones. .NET Framework (de la 1.0 en 2002 a la 4.8.1) solo funciona en Windows y sigue ejecutando muchas aplicaciones antiguas. .NET (llamado .NET Core hasta la versión 5) es el sucesor de código abierto y multiplataforma que funciona en Windows, Linux y macOS. El trabajo nuevo se hace sobre .NET; las versiones pares, como .NET 8 y .NET 10, tienen tres años de soporte a largo plazo.

Cómo se organiza un programa en C#

Un programa en C# se compone de tipos (clases, structs, interfaces, enums, records) que contienen miembros (campos, propiedades, métodos). La ejecución empieza en un método static llamado Main. Los namespaces agrupan tipos relacionados, y las directivas using permiten referirse a ellos por nombres cortos.

Salida:

Maya: 21.00
Leo: 13.00

Ya se ven algunas cosas: Order es una clase con dos propiedades (Customer, Total), un constructor y un método. decimal es el tipo para el dinero, y el sufijo m marca un literal decimal. var deja que el compilador deduzca el tipo de una variable local, y List<Order> es una colección genérica que solo acepta objetos Order. El {order.Total:F2} dentro de $"..." da formato a un número con dos decimales.

En un proyecto real, cada clase suele vivir en su propio archivo, y los archivos se compilan juntos en un único ensamblado. Consulta clases y objetos para los detalles.

El tipado estático en la práctica

El compilador conoce el tipo de cada expresión, así que una gran clase de errores nunca llega a un programa en ejecución. Asignar un string a un int, llamar a un método que no existe o pasar los argumentos en el orden equivocado falla en tiempo de compilación con un error que señala la línea.

Salida:

29.97
45

Los tipos también mueven el editor: el autocompletado, el renombrado y "buscar todas las referencias" son exactos en C# porque las herramientas leen la misma información de tipos que el compilador.

Las versiones de C# y lo que añadieron

Desde C# 9 en 2020, cada noviembre sale una versión nueva junto con una nueva versión de .NET; antes, las versiones llegaban cada dos o tres años. Cada versión está diseñada para que el código existente siga compilando, y las raras excepciones (como que field pase a ser palabra clave dentro de los accesores de propiedad en C# 14) se documentan como cambios incompatibles, así que un programa escrito para C# 2 casi siempre compila hoy sin cambios.

VersiónAñoNovedades destacadas
C# 22005Genéricos, tipos de valor nullable (int?), iteradores (yield)
C# 32007LINQ, expresiones lambda, var, inicializadores de objetos, métodos de extensión
C# 42010dynamic, parámetros opcionales y con nombre
C# 52012async y await
C# 62015Interpolación de strings $"...", nameof, el operador condicional null ?.
C# 72017Tuplas, out var, pattern matching con is, separadores de dígitos
C# 82019Tipos de referencia nullable, expresiones switch, rangos s[1..4], ??=, flujos async
C# 92020Records, accesores init, instrucciones de nivel superior, new() con tipo de destino
C# 102021Usings globales, namespaces con ámbito de archivo, record structs
C# 112022Literales de string sin procesar """, miembros required, patrones de lista
C# 122023Constructores primarios para clases, expresiones de colección [1, 2, 3]
C# 132024Colecciones params, el tipo System.Threading.Lock
C# 142025Miembros de extensión, la palabra clave field en las propiedades

Las versiones nuevas sobre todo eliminan ceremonia. Este programa de C# 9 y posteriores usa instrucciones de nivel superior (sin class Program ni Main), un record y una expresión switch:

// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));

static string Shipping(Order o) => o.Total switch
{
    >= 50m => "free shipping",
    >= 20m => "standard shipping",
    _ => "shipping fee applies"
};

record Order(string Customer, decimal Total);

La misma lógica en el estilo explícito antiguo, que compila en C# 6 y en todas las versiones posteriores:

Salida:

standard shipping

Las dos formas son C# válido. Te encontrarás el estilo antiguo y explícito en código existente, tutoriales y proyectos de Unity, y el estilo más corto en los proyectos .NET nuevos.

LINQ: consultar datos desde el lenguaje

LINQ (Language Integrated Query, C# 3) es una de las características que la gente menciona cuando explica por qué le gusta C#. Permite filtrar, ordenar, agrupar y transformar cualquier colección con una cadena de métodos:

Salida:

95, 91, 88, 72
Average: 78.0
Best: 95

La misma sintaxis funciona con listas en memoria, con tablas de bases de datos mediante Entity Framework y con XML. Más en LINQ.

¿Es C# un buen primer lenguaje?

C# pide más al principio que Python: declaras tipos, terminas las sentencias con punto y coma y pones el código dentro de clases. A cambio, el compilador detecta los errores pronto, las herramientas (Visual Studio, VS Code, Rider) son excelentes y los conceptos se trasladan directamente a Java, TypeScript, Kotlin y C++. Si quieres hacer juegos en Unity o trabajar en una empresa .NET, es la opción evidente. Si tu objetivo es el análisis de datos o el aprendizaje automático, Python tiene un ecosistema mayor.

Para empezar, instala el SDK de .NET y ejecuta dotnet new console, o empieza por Hello World y ejecuta directamente los ejemplos de estas páginas.

Preguntas frecuentes

¿Qué es C#?

C# (se pronuncia "C sharp") es un lenguaje de programación de propósito general, orientado a objetos y con tipado estático, creado en Microsoft y publicado por primera vez en 2002. Su código fuente se compila a un lenguaje intermedio que el runtime de .NET convierte en código máquina, con memoria gestionada por un recolector de basura. Se usa para backends web, juegos en Unity, aplicaciones de escritorio, servicios en la nube y herramientas.

¿C# es lo mismo que .NET?

No. C# es el lenguaje; .NET es la plataforma sobre la que se ejecuta: el runtime (CLR), la biblioteca de clases base (System.Collections.Generic, System.IO, etc.) y las herramientas del SDK. F# y Visual Basic también se ejecutan sobre .NET, y cada versión de C# suele publicarse junto con una versión de .NET (C# 12 con .NET 8, por ejemplo).

¿Para qué se usa C#?

Para API y sitios web con ASP.NET Core, juegos con Unity (su lenguaje de scripting es C#), aplicaciones de escritorio para Windows con WPF y WinForms, aplicaciones multiplataforma con .NET MAUI, servicios en la nube y Azure Functions, y herramientas de línea de comandos. Es habitual en el software empresarial y en los estudios de videojuegos.

¿Es difícil aprender C#?

Es un primer lenguaje de dificultad media. La sintaxis es de estilo C y más estricta que la de Python, ya que cada variable tiene un tipo que el compilador comprueba, pero la memoria se gestiona por ti y los mensajes de error son claros. La mayoría de los principiantes pueden escribir programas de consola útiles tras unas pocas semanas de práctica.

¿Merece la pena aprender C# hoy?

Sí. C# aparece siempre entre los lenguajes más usados en las encuestas a desarrolladores, .NET es de código abierto y multiplataforma, y el lenguaje recibe una versión nueva cada noviembre. Es la opción práctica si quieres hacer juegos en Unity o trabajar en empresas basadas en tecnología de Microsoft.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR