B3-T6: Plataforma .NET

.NET es la segunda plataforma de desarrollo más preguntada tras Java. Las preguntas suelen centrarse en la arquitectura (CLR, CIL, BCL), comparaciones con Java (struct vs class, NuGet vs Maven) y el stack web ASP.NET.

EVOLUCIÓN DE .NET

Fuente: Microsoft Learn (learn.microsoft.com) — documentación oficial pública. Historia basada en anuncios públicos y releases de .NET.
AñoVersiónHito clave
2002.NET Framework 1.0Lanzamiento inicial: CLR, BCL, C# 1.0, ASP.NET, Windows Forms
2005.NET Framework 2.0Generics en C# 2.0, nullable types
2007.NET Framework 3.5LINQ, lambdas (C# 3.0), Entity Framework 1.0
2010.NET Framework 4.0Dynamic typing (dynamic), Task Parallel Library (TPL), MEF
2012.NET Framework 4.5async/await (C# 5.0), mejoras WCF y WPF
2016.NET Core 1.0Multiplataforma (Windows, Linux, macOS). Open source (MIT)
2019.NET Core 3.0/3.1WPF/WinForms en Core, C# 8.0 (nullable reference types)
2020.NET 5Unificación: se elimina "Core" del nombre. Un solo .NET para todo
2021.NET 6 (LTS)Minimal APIs, Hot Reload, MAUI (preview)
2022.NET 7Native AOT, mejoras de rendimiento
2023.NET 8 (LTS)Blazor unificado (SSR + WASM), Native AOT para ASP.NET, Aspire
2024.NET 9Mejoras AOT, AI integrations, Aspire mejorado
Tip examen: Desde .NET 5 (2020), no hay .NET Framework nuevo. El último .NET Framework es 4.8.x (solo Windows, solo mantenimiento). Todo el desarrollo nuevo va en .NET (Core), que es multiplataforma y open source.

ARQUITECTURA .NET

ComponenteQué esEquivalente Java
CLR (Common Language Runtime)Máquina virtual que ejecuta código CIL (bytecode .NET)JVM
CIL (Common Intermediate Language)Código intermedio al que se compilan todos los lenguajes .NETBytecode Java
BCL (Base Class Library)Biblioteca estándar: colecciones, I/O, redes, XML, etc.Java SE API (java.lang, java.util)
CTS (Common Type System)Sistema de tipos compartido por todos los lenguajes .NETJLS type system
CLS (Common Language Specification)Subconjunto del CTS que garantiza interoperabilidad entre lenguajes
JIT CompilerCompila CIL → código máquina nativo en tiempo de ejecuciónJIT de la JVM (HotSpot)
GC (Garbage Collector)Recolector de basura generacional (Gen 0, 1, 2 + LOH)G1 GC / ZGC
Pregunta clásica: El CLR ejecuta CIL (antes llamado MSIL), no código C# directamente. El proceso es: Código fuente → Compilador → CIL (assembly .dll/.exe) → JIT → Código máquina nativo.

COMPILACIÓN Y EJECUCIÓN

ModoProcesoCuándo
JIT (Just-In-Time)CIL → nativo en runtime, método por métodoComportamiento por defecto
AOT (Ahead-Of-Time)CIL → nativo en compilación. No necesita CLR en destino.NET Native, Native AOT (.NET 7+), Xamarin/MAUI
Tiered CompilationPrimera ejecución rápida (tier 0), optimización progresiva (tier 1)Default desde .NET Core 3.0

LENGUAJES .NET

LenguajeParadigmaUso principalCaracterística diferenciadora
C#OOP, funcionalLenguaje principal de .NET: web, desktop, cloud, juegos (Unity)Evoluciona rápido: records, pattern matching, top-level statements
VB.NETOOPLegacy, migración desde VB6Sintaxis verbosa, sin nuevas features desde .NET 5
F#Funcional puro + OOPData science, finanzas, scriptsInmutabilidad por defecto, discriminated unions, type inference

C# vs JAVA — COMPARATIVA

Pregunta frecuente del examen TAI: comparar mecanismos equivalentes entre las dos plataformas.
ConceptoC# / .NETJava
Máquina virtualCLRJVM
Código intermedioCIL (MSIL)Bytecode
Gestor de paquetesNuGetMaven / Gradle
ORMEntity FrameworkHibernate (JPA)
Tipos valor vs ref.struct (valor en stack) vs class (referencia en heap)Solo primitivos en stack; todo lo demás es referencia
PropiedadesSintaxis nativa: get; set;Getters/setters manuales o Lombok
Eventosevent + delegate nativoObserver pattern manual / listeners
Asyncasync/await (C# 5, 2012)CompletableFuture / Virtual Threads (Java 21)
LINQConsultas integradas en lenguajeStream API (Java 8)
Nullable ref typesC# 8+ (opt-in)Optional<T> (Java 8)
InteroperabilidadP/Invoke (C nativo), COMJNI (Java Native Interface)

TIPOS EN C#: struct vs class

Aspectostruct (tipo valor)class (tipo referencia)
AlmacenamientoStack (o inline si es campo de clase)Heap (referencia en stack)
AsignaciónCopia completa del valorCopia de la referencia (alias)
HerenciaNo (solo implementa interfaces)Sí (herencia simple)
NullableNo por defecto (usar Nullable<T> o T?)Sí (puede ser null)
GCNo pasa por GC si vive en stackRecogido por GC
Ejemplos BCLint, double, DateTime, Guidstring, object, List<T>
Pregunta recurrente: struct = tipo valor (stack), class = tipo referencia (heap). En Java NO existe el equivalente directo de struct (todo objeto va al heap).

COLECCIONES .NET

InterfazImplementacionesEquivalente Java
IList<T>List<T>, ArrayArrayList
IDictionary<K,V>Dictionary<K,V>, SortedDictionary<K,V>HashMap, TreeMap
ISet<T>HashSet<T>, SortedSet<T>HashSet, TreeSet
IEnumerable<T>Base de todas las colecciones (iterable)Iterable<T>
ConcurrenteConcurrentDictionary, ConcurrentBag, ConcurrentQueueConcurrentHashMap, ConcurrentLinkedQueue

LINQ (Language Integrated Query)

Fuente: Microsoft Learn — LINQ Documentation. LINQ permite escribir consultas sobre colecciones, XML, bases de datos, etc. directamente en C#.
SintaxisEjemplo
Query syntaxvar result = from p in personas where p.Edad > 18 select p.Nombre;
Method syntaxvar result = personas.Where(p => p.Edad > 18).Select(p => p.Nombre);
Operador LINQFunciónEquivalente Stream Java
Where()Filtrarfilter()
Select()Proyectar/transformarmap()
OrderBy() / OrderByDescending()Ordenarsorted()
GroupBy()AgruparCollectors.groupingBy()
First() / FirstOrDefault()Primer elementofindFirst()
Any() / All()Existe / todos cumplenanyMatch() / allMatch()
Count()Contarcount()
ToList() / ToArray()Materializarcollect(toList())

PERSISTENCIA: ADO.NET Y ENTITY FRAMEWORK

AspectoADO.NETEntity Framework (EF Core)
NivelBajo nivel — SQL directoAlto nivel — ORM
Clases claveSqlConnection, SqlCommand, SqlDataReader, DataSetDbContext, DbSet<T>, entidades POCO
SQLEscrito manualmenteGenerado por LINQ to Entities / consultas LINQ
MapeoManual: reader["columna"]Automático: convenciones + anotaciones / Fluent API
Equivalente JavaJDBCHibernate / JPA
EF Core enfoqueDescripción
Code FirstDefinir clases C# → EF genera la base de datos (migraciones)
Database FirstBD existente → EF genera clases C# (scaffold)
Migracionesdotnet ef migrations add NombreMigracion → evolución incremental del esquema
Change TrackingDbContext detecta automáticamente cambios en entidades cargadas
Lazy LoadingRelaciones cargadas al acceder (requiere paquete Proxies)

ASP.NET CORE — WEB

Fuente: ASP.NET Core Documentation (learn.microsoft.com/aspnet). Framework web unificado, multiplataforma, open source.
ModeloDescripciónCuándo usar
MVCModel-View-Controller con Razor Views (.cshtml)Aplicaciones web con vistas server-side
Razor PagesModelo page-based (PageModel + .cshtml)Formularios, CRUD sencillos
Web APIControllers que devuelven JSON/XML (RESTful)APIs para SPAs, móviles, microservicios
Minimal APIsEndpoints sin controllers, en Program.csMicroservicios simples, prototipos (.NET 6+)
BlazorSPA con C# en lugar de JavaScriptDevs C# que quieren UI interactiva sin JS
gRPCRPC binario con Protocol BuffersComunicación inter-servicios de alto rendimiento
SignalRComunicación en tiempo real (WebSocket)Chat, notificaciones, dashboards en vivo

BLAZOR

Modo BlazorDónde ejecuta C#Ventaja
Blazor ServerEn el servidor (SignalR envía diffs al DOM)Carga rápida, acceso directo a recursos del servidor
Blazor WebAssemblyEn el navegador (via WASM)Offline, no requiere servidor para UI
Blazor United (.NET 8)SSR + interactividad por componenteLo mejor de ambos mundos, renderizado híbrido

MIDDLEWARE Y PIPELINE ASP.NET CORE

ConceptoDescripción
MiddlewareComponente que procesa la petición HTTP en cadena (similar a Filters en Java)
PipelineCadena de middlewares: Request → MW1 → MW2 → ... → Endpoint → ... → MW2 → MW1 → Response
Dependency InjectionIntegrado nativamente en ASP.NET Core: builder.Services.AddScoped<IService, ServiceImpl>()
Configurationappsettings.json + environment variables + secretos de usuario
Program.csPunto de entrada (desde .NET 6: minimal hosting, sin Startup.cs)

HERRAMIENTAS DE DESARROLLO

HerramientaFunción
Visual StudioIDE completo de Microsoft (Windows/Mac). IntelliSense, debugger, profiler
VS CodeEditor ligero con extensión C# Dev Kit
JetBrains RiderIDE multiplataforma basado en IntelliJ + ReSharper
dotnet CLIHerramienta de línea de comandos: dotnet new, dotnet build, dotnet run, dotnet test, dotnet publish
NuGetGestor de paquetes .NET. Repositorio: nuget.org. Config: *.csproj (<PackageReference>)
MSBuildMotor de compilación que lee .csproj / .sln
Tip examen: NuGet es el equivalente .NET de Maven/npm. Los paquetes se declaran en el archivo .csproj como <PackageReference>.

.NET ASPIRE

AspectoDescripción
Qué esStack opinado para aplicaciones cloud-native .NET (desde .NET 8)
OrquestaciónArranca y conecta múltiples servicios + dependencias (Redis, PostgreSQL, etc.) para desarrollo local
DashboardPanel visual de telemetría: logs, traces, métricas OpenTelemetry
Service DiscoveryResolución automática de URLs entre servicios

TESTING EN .NET

FrameworkTipoUso
xUnitTesting unitarioEstándar de facto en .NET moderno. Atributos: [Fact], [Theory]
NUnitTesting unitarioAlternativa madura. [Test], [TestCase]
MSTestTesting unitarioFramework de Microsoft. [TestMethod]
MoqMockingLibrería de mocks más popular
FluentAssertionsAssertions legiblesresult.Should().Be(42)


FUENTES PÚBLICAS

Este resumen ha sido elaborado íntegramente a partir de fuentes de dominio público. No se ha utilizado material con copyright de terceros ni material de preparadores.
FuenteTipoReferencia
Microsoft Learn — .NET DocumentationDocumentación oficiallearn.microsoft.com/dotnet
C# Language Specification (ECMA-334)Estándarecma-international.org
CLI Standard (ECMA-335)Estándarecma-international.org
ASP.NET Core DocumentationDocumentación oficiallearn.microsoft.com/aspnet
.NET Runtime (GitHub)Código abierto (MIT)github.com/dotnet/runtime
Entity Framework Core DocumentationDocumentación oficiallearn.microsoft.com/ef

¿Quieres practicar este tema con tests?

MIMIR tiene más de 5.000 preguntas verificadas, simulacros con penalización real y chat IA que resuelve tus dudas sobre este tema.

Abrir MIMIR gratis →