La plataforma .NET
.NET es la plataforma de desarrollo de Microsoft para construir aplicaciones de escritorio, web, móviles, servicios y nube. Desde la aparición de .NET Core (unificado a partir de .NET 5 en un único producto), .NET es un proyecto de código abierto (open source), multiplataforma (Windows, Linux, macOS) y gobernado por la .NET Foundation, en contraste con el histórico .NET Framework, ligado a Windows. Toda la infraestructura de ejecución está definida por un estándar público, la Common Language Infrastructure (CLI), especificación ECMA-335.
El Common Language Runtime (CLR)
El CLR (Common Language Runtime) es el entorno de ejecución de código administrado (managed code) de .NET; funciona como una máquina virtual que gestiona la ejecución de los programas desarrollados en el framework. El código que se compila para el CLR se denomina código administrado y se beneficia de servicios como:
-
Recolección de basura (garbage collection): libera automáticamente la memoria de los objetos que ya no se usan, evitando fugas de memoria.
-
Manejo estructurado de excepciones, incluso entre lenguajes.
-
Seguridad, verificación de tipos, control de versiones y despliegue.
-
Integración entre lenguajes (cross-language): objetos escritos en distintos lenguajes (C#, VB.NET, F#) interoperan porque comparten un sistema de tipos común.
El CLR es, por tanto, el componente encargado de ejecutar el manejo de excepciones y la recolección de basura.
CIL, CTS y ensamblados
-
CIL (Common Intermediate Language): lenguaje de bajo nivel y neutral respecto a la plataforma que utilizan los compiladores como salida intermedia. El código fuente (C#, VB.NET…) se compila a CIL, y el CLR lo compila a código nativo (JIT) en tiempo de ejecución.
-
CTS (Common Type System): especificación de los tipos de datos comunes para todos los lenguajes de .NET, lo que permite la interoperabilidad entre ellos.
-
Ensamblado (assembly): es la unidad fundamental de implementación y despliegue de .NET; se materializa en un archivo ejecutable (.exe) o una biblioteca de clases (.dll). Contiene el CIL y los metadatos. Una característica clave es que los ensamblados solo se cargan en memoria si son necesarios: si no se usan, no se cargan.
Namespace y NuGet
-
Un Namespace (espacio de nombres) es un prefijo utilizado para agrupar tipos relacionados y evitar colisiones de nombres (por ejemplo,
System.Web.Mvc). -
NuGet es el administrador de paquetes (package manager) oficial de .NET para incorporar y versionar dependencias/librerías de terceros.
-
Para la gestión de logs en la plataforma .NET, una librería habitual es Apache Log4NET (port de Log4j).
El lenguaje C#
C# es el lenguaje principal de .NET, orientado a objetos y con tipado fuerte.
Herencia y miembros de clase
C# admite herencia única (una clase deriva de una sola clase base), aunque puede implementar múltiples interfaces. Una clase puede contener dos tipos de miembros básicos: miembros de métodos y campos. Los constructores son las acciones necesarias para inicializar instancias de la clase (o la propia clase, en el caso del constructor estático).
Modificadores de acceso (accesibilidad)
C# define cuatro modificadores (public, protected, internal, private) que combinan seis niveles de accesibilidad:
| Modificador | Alcance del acceso |
|---|---|
| public | Sin restricciones; desde cualquier parte del código. |
| protected | La clase contenedora o las clases derivadas de ella. |
| internal | Limitado al ensamblado actual. |
| protected internal | El ensamblado actual o las clases derivadas. |
| private | Solo la clase/tipo contenedor. |
| private protected | La clase contenedora o las clases derivadas que forman parte del mismo ensamblado. |
Métodos virtuales, de reemplazo y abstractos
-
Un método virtual se declara e implementa en la clase base con la palabra clave
virtualy puede ser reemplazado (no obligatoriamente) por las clases derivadas. -
Un método de reemplazo (override) redefine en la clase derivada, con
override, el comportamiento de un métodovirtualde la clase base. -
Un método abstracto es un método virtual sin implementación en la clase base; solo se permite en una clase abstracta y debe implementarse obligatoriamente en todas las clases derivadas no abstractas.
Delegados y LINQ
-
Un delegate es, conceptualmente, un puntero a una función con seguridad de tipos, que permite pasar métodos como parámetros.
-
LINQ significa Language INtegrated Query: un conjunto de tecnologías de consulta integradas en el lenguaje, utilizado en C#. Para concatenar dos secuencias se usa el operador
Concat.
C++ (contexto comparativo)
C++ sí utiliza punteros (afirmar lo contrario es falso) y dispone de un amplio conjunto de palabras reservadas (keywords).
Desarrollo web: ASP.NET, IIS e interfaces
ASP.NET es el marco de desarrollo web de .NET, habitualmente alojado en el servidor IIS (Internet Information Services).
-
Un Application Pool en IIS es una forma de aislar unas aplicaciones web de otras, de modo que un fallo en una no afecte a las demás (aislamiento de procesos).
-
El ViewState en ASP.NET Web Forms es un mecanismo para mantener el estado de la página en el lado del cliente (serializado en un campo oculto).
MVC frente a Web Forms
MVC significa Model-View-Controller (Modelo-Vista-Controlador). Su concepto principal es la separación de la lógica de negocio de la presentación. ASP.NET MVC es un marco de presentación de poca complejidad y fácil de comprobar (testeable) que se integra con las características existentes de ASP.NET y ofrece una alternativa al patrón de ASP.NET Web Forms basada en el modelo de arquitectura MVC. El marco MVC clásico se define en el espacio de nombres System.Web.Mvc.
-
El Routing es el mecanismo para mapear URLs a controladores y acciones.
-
Una API REST es, en la práctica, un backend capaz de responder a llamadas a una serie de URLs, típicamente en formato JSON.
ASP.NET Core
En ASP.NET Core, la clase que por convención configura los servicios y la canalización (pipeline) de solicitudes se denomina Startup. Razor es la sintaxis de plantillas utilizada en ASP.NET Core para crear vistas dinámicas en aplicaciones web, combinando marcado HTML con código C#.
Fuentes
-
Microsoft Learn — Common Language Runtime (CLR) overview: https://learn.microsoft.com/en-us/dotnet/standard/clr
-
Microsoft Learn — Access Modifiers (C# reference): https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers
-
Microsoft Learn — Common Type System: https://learn.microsoft.com/en-us/dotnet/standard/base-types/common-type-system
-
Microsoft Learn — Assemblies in .NET: https://learn.microsoft.com/en-us/dotnet/standard/assembly/
-
Microsoft Learn — What is ASP.NET Core / MVC: https://learn.microsoft.com/en-us/aspnet/core/mvc/overview
-
Microsoft Learn — LINQ (Language Integrated Query): https://learn.microsoft.com/en-us/dotnet/csharp/linq/
-
Microsoft Learn — NuGet package manager: https://learn.microsoft.com/en-us/nuget/what-is-nuget
-
Microsoft Learn — IIS Application Pools: https://learn.microsoft.com/en-us/iis/configuration/system.applicationhost/applicationpools/