Librerías NET de clase base

System.Collections: Colecciones de objetos. Provee las interfaces para crear colecciones y listas ordenadas.

System.Collections.Generic: Clases que representan colecciones

System.Configuration: Clases e interfaces para la manipulación por código de archivos .config

System.Diagnostics: Clases para interactuar con procesos de sistema (Como el registro de eventos) y para depurar la aplicación.

System.Globalization: Clases necesarias para escribir aplicaciones para más de una cultura u idioma.

System.IO: Clases para trabajar con archivos, secuencias de datos y directorios.

System.Net: Clases para acceder a recursos de redes.

System.Relection: Clases que permiten obtener información sobre códigos administrados leyendo metadatos.

System.Resources: Clases e interfaces que permiten manipular recursos (imagen, sonido,etc) almacenados en un ensamblado.

System.Security: Clases que permiten especificar y/o conocer el contexto de seguridad.

System.ServiceProcess: Clases que permiten crear e instalar servicios.

System.Text: Clases para manipular cadenas de texto y convertir cadenas de byte en texto (o viceversa).

System.Threading: Clases para la creación de aplicaciones multihilo y gestion de los mismos.

System.Runtime.InteropServices: Clases para crear aplicaciones que interactúen con componentes COM y código no administrado.

System.Runtime.Remoting: Clases e interfaces para aplicaciones distribuidas.

System.Runtime.Serialization: Clases para serializar y deserializar objetos.

System.Data: Clases fundamentales de ADO.NET

System.Data.Common: Clases compartidas y heredadas por todos los proveedores de acceso a datos.

System.Data.SqlClient: Clases que implementan proveedor de acceso a datos para SQL server.

System.Data.OracleClient: Clases que implementan proveedor de acceso a datos para Oracle.

System.Data.OleDb: Clases para acceder a datos mediante Oledb.

Systen.Data.SqlTypes: Clases para tipos nativos de sql server.

System.Xml: Clases para trabajar con documentos xml.

System.Windows.Forms: Contiene las clases básicas para crear aplicaciones basadas en ventanas, también las clases de diálogo y las de impresión.

System.Drawing: Clases para dibujar figuras y texto, manipular imágenes, usar tramas y degradados.

System.Web.UI: Clases e interfaces para la construcción de páginas webs.

System.Web.Service: Clases para crear servicios web.

System.Windows.Forms: Contiene las clases básicas para crear aplicaciones basadas en ventanas, también las clases de diálogo y las de impresión.

System.Drawing: Clases para dibujar figuras y texto, manipular imágenes, usar tramas y degradados.

System.Web.UI: Clases e interfaces para la construcción de páginas webs.

System.Web.Service: Clases para crear servicios web.

Namespace

Un namespace o espacio de nombres es un medio para organizar las clases dentro del entorno, agrupándolas de un modo más lógico y jerárquico, permitiendo la existencia de clases con el mismo nombre en secciones distintas (ej, Casa.Factura y Trabajo.Factura)

Cuando se crea un proyecto dentro de Visual Studio .NET, este crea de forma automática un namespace con el nombre del proyecto. Si el programador quiere crear un namespace de forma explícita, puede hacerlo mediante la palabra clave Namespace dentro del código del proyecto.

Para acceder desde el código de una aplicación a una clase contenida dentro de un espacio de nombre debemos indicarlo usando la palabra clave Imports en la cabecera del módulo de código junto al nombre del namespace (Ej. Imports Casas.Duplex) y clase a la que queremos acceder; o bien usando la descripción calificada completa en cada momento que necesitemos hacer referencia a la clase.

Type Checker

Es un componente del CLR que se asegura de que las conversiones automáticas que se deban realizar durante la ejecución del programa sean válidas y estén permitidas.
En otras palabras, detecta la incompatibilidad de tipos, impidiéndonos asignar un valor de otro tipo a una variable.

Common Type System (CTS)

El Common Type System (CTS) o Sistema de Tipo Común es el mecanismo del CLR que permite
definir el modo en que los tipos serán creados y manipulados por el entorno de ejecución o el conjunto de reglas que han de seguir las definiciones de tipos de datos para que el CLR las acepte. Es decir, aunque cada lenguaje gestionado disponga de su propia sintaxis para definir tipos de datos, en el MSIL resultante de la compilación de sus códigos fuente se han de cumplir las reglas del CTS.

Gracias al CTS, desde un lenguaje como VB.NET, podemos instanciar un objeto de una clase escrita en C#; y hacer una llamada a uno de los métodos del objeto sin realizar conversiones de tipos en los parámetros del método, funcionando todo de forma transparente, además no permite definir o diseñar el modo en cómo el código de la aplicación será ejecutado, pero no se encarga directamente de su ejecución.

Common Intermediate Language (CIL)

Common Intermediate Language  (anteriormente llamado Microsoft Intermediate Language o MSIL) es el lenguaje de programación legible por humanos de más bajo nivel en el Common Language Infrastructure y en el .NET Framework. Los lenguajes del .NET Framework (C#,Visual Basic :Net)  compilan a CIL, el cual a su vez es ensamblado en bytecode.

CIL es un lenguaje ensamblador orientado a objetos, y está basado en pilas. Es ejecutado por una máquina virtual. Los lenguajes .NET principales son C#, Visual Basic .NET, C++/CLI, y J#.

CIL fue conocido originalmente como Microsoft Intermediate Language (MSIL) durante las versiones de prueba de los lenguajes .NET. Debido a la estandarización de C# y CLI, el bytecode es ahora conocido oficialmente como CIL. Debido a esto, CIL es frecuentemente llamado MSIL. Es posible ejecutar este lenguaje en plataformas GNU/Linux gracias al Proyecto Mono, que implementa una maquina virtual similar a la de .NET pero de software libre.

Durante la compilación de los lenguajes de programación .NET, el código fuente es convertido a código CIL en lugar de código maquina especifico del procesador. CIL es un conjunto de instrucciones independientes de la plataforma y CPU que puede ser ejecutado en cualquier ambiente que soporte el .NET Framework.

La compilación en tiempo de ejecución (JIT, just-in-time) involucra convertir el código CIL en código inmediatamente ejecutable por la CPU. La compilación JIT proporciona optimización especifica para la CPU, seguridad de tipos en tiempo de ejecución, y verificación de ensamblados.

Aquí os dejo el código de un hola mundo en CIL:

.assembly Hello {}
.method public static void Main() cil managed
{
     .entrypoint
     .maxstack 1
     ldstr "Hello, world!"
     call void [mscorlib]System.Console::WriteLine(string)
     ret
}

Y el código C# que generaría este ensamblado:

 class Hello
 {
     static void Main()
     {
         System.Console.WriteLine("Hello, world!");
     }
 }