Вы находитесь на странице: 1из 15

1.1 Captulo 1: El Lenguaje C# y el Framework .

NET


Captulo 1

El Lenguaje C# y el Framework .NET




X |v|t | wx xzt}x x t vt|wtw
Ztx

X|x xzt}x x t t wx t ttutA
ct Vx{


Tabla de Contenido

1.1 C# y el Framework de .NET ........................................................................................................................ 1.2
1.2 Common Language Runtime (CLR) ........................................................................................................ 1.6
1.3 Microsoft Intermediate Language (MSIL) ........................................................................................... 1.9
1.4 Lenguaje de programacin C# ................................................................................................................1.11
1.5 Antecedentes del lenguaje ........................................................................................................................1.12
1.6 Caractersticas principales de C# ..........................................................................................................1.12









1.2 Captulo 1: El Lenguaje C# y el Framework .NET

1.1 C# y el Framework de .NET

C# (pronunciado C Sharp) es el nuevo lenguaje de propsito general orientado a
objetos creado por Microsoft para su nueva plataforma .NET

Microsoft .NET es el conjunto de nuevas tecnologas en las que Microsoft ha estado
trabajando estos ltimos aos con el objetivo de mejorar tanto su sistema operativo
como su arquitectura de desarrollo anterior, para obtener una plataforma con la que sea
sencilla la construccin de software. Su objetivo es crear un marco de desarrollo de
software sencillo, reduciendo las vulnerabilidades y aumentando la seguridad de los
programas desarrollados. Imaginemos que es el intermediario entre el sistema operativo
y las aplicaciones, las aplicaciones dicen que hacer y el .Net Framework le dice al
sistema operativo como hacerlo.

El primer gran cambio que vivimos, fue el paso de la programacin en MSDOS a la
programacin Windows (Win16), ms tarde con la evolucin de los sistemas operativos,
el segundo cambio, las aplicaciones Win32, y ahora estamos viviendo la tercera de las
revoluciones, lo que Microsoft llama .NET Framework o ms comnmente .NET.


El .NET Framework, en general, es un marco de desarrollo que permite el desarrollo y
ejecucin de diversas aplicaciones hechas en los diversos lenguajes que soportan,
.NET Framework, es una plataforma para construir, distribuir y ejecutar servicios Web y
aplicaciones.

La plataforma .NET ofrece numerosos servicios a las aplicaciones que para ella se
escriban, como son un recoleccin de basura, independencia de la plataforma, total
integracin entre lenguajes (por ejemplo, es posible escribir una clase en C# que derive
de otra escrita en Visual Basic.NET que a su vez derive de otra escrita en Cobol)

Como se deduce del prrafo anterior, es posible programar la plataforma .NET en
prcticamente cualquier lenguaje, pero Microsoft ha decidido sacar uno nuevo porque
ha visto conveniente poder disponer de un lenguaje diseado desde cero con vistas a
ser utilizado en .NET, un lenguaje que no cuente con elementos heredados de
versiones anteriores e innecesarios en esta plataforma y que por tanto sea lo ms
sencillo posible para programarla aprovechando toda su potencia y versatilidad.

C# combina los mejores elementos de mltiples lenguajes de amplia difusin como C++,
Java, Visual Basic o Delphi. De hecho, su creador Anders Heljsberg fue tambin el
creador de muchos otros lenguajes y entornos como Turbo Pascal, Delphi o Visual J++.
La idea principal detrs del lenguaje es combinar la potencia de lenguajes como C++
con la sencillez de lenguajes como Visual Basic, y que adems la migracin a este
lenguaje por los programadores de C/C++/Java sea lo ms inmediata posible.

Microsoft lanza esta nueva tecnologa como respuesta a tecnologa Java de Sun. El
Framework .NET tiene grandes similitudes con la plataforma Java, por eso todos
aquellos que estn familiarizados con Java comprendern en seguida el funcionamiento
de .NET.

1.3 Captulo 1: El Lenguaje C# y el Framework .NET

Adems de C#, Microsoft proporciona Visual Studio.NET, la nueva versin de su
entorno de desarrollo adaptada a la plataforma .NET y que ofrece una interfaz comn
para trabajar de manera cmoda y visual con cualquiera de los lenguajes de la
plataforma .NET (por defecto, C++, C#, Visual Basic.NET y JScript.NET, aunque
pueden aadirse nuevos lenguajes mediante los plugins que proporcionen sus
fabricantes).

Centrndonos en el concepto Framework .NET, como el trmino en ingls dice
(Framework = Armazn) es un marco en donde nuestras aplicaciones corrern.
Nuestras aplicaciones ya no corren directamente bajo el sistema operativo si no que
corren bajo este armazn o marco.

Elementos principales .NET Framework:

CLR (Common Language Runtime) l
Conjunto de clases del .NET Framework
ASP.NET
Los servicios Web Remoting
Windows Forms

El CLR es el motor de ejecucin de las aplicaciones .NET, lo que en Java sera la
mquina virtual de Java, este motor se encarga de ejecutar todo el cdigo .NET para
ello a de ser en dicho lenguaje. El CLR es el encargado de convertir este lenguaje
intermedio en leguaje mquina del procesador, esto normalmente se hace en tiempo
real por un compilador JIT (Just-In-Time) que lleva incorporado el CLR. Ver seccin 1.2

El conjunto de clases del .NET Framework es la piedra angular de cualquier
desarrollador de .NET, es un rico conjunto de clases, interfaces, tipos que simplifican y
optimizan el desarrollo de aplicaciones .NET adems de proporcionar acceso a la
funcionalidad del sistema. Como desarrolladores el dominio de este conjunto de clases
es vital para un buen desarrollo en .NET.

ASP.NET es la parte del .NET Framework dedicada al desarrollo Web. A travs del
servidor Web (IIS) nuestras aplicaciones ASP.NET se ejecutarn bajo el CLR y
podremos usar el conjunto de clases del .NET Framework para desarrollarlas,
obteniendo as una versatilidad y una potencia nunca antes conseguida en las
aplicaciones ASP.

Tambin son destacables los servicios Web, que nos permitirn comunicarnos a travs
de Internet entre diferentes computadoras, incluso entre distintos sistemas. As como
.NET Remoting que nos permite tener objetos en mquinas remotas e invocarlos desde
otras mquinas. Y Windows Forms, parte del .NET Framework que permite crear
aplicaciones en el ms clsico de los sentidos.

En la figura 1.1 se puede observar en trminos generales como se realiza la
compilacin de un programa escrito en algn lenguaje como C#, el bloque CLR se
describe en la seccin 1.2

1.4 Captulo 1: El Lenguaje C# y el Framework .NET


Figura 1.1

Asimismo, usando Microsoft Visual C# 2008 Express Edition podemos desarrollar
aplicaciones de consola y de interfaz grfica de usuario (GUI), junto con aplicaciones
Windows Forms, sitios Web, aplicaciones Web y servicios Web tanto en cdigo nativo
como en el cdigo administrado.


La unidad bsica sobre la que trabaja el .NET Framework es el assembly (o
ensamblado en espaol), y en el mundo real lo podemos ver como los ejecutables (exe),
o libreras DLL generados usando algn lenguaje de programacin.

Existen varias versiones del .NET Framework: 1.0, 1.1, 2.0, 3.0 y 3.5. En estas dos
ultimas versiones, el CLR es el mismo de la versin 2.0, pero con el agregado de 3
componentes ms, como puede apreciarse en la figura 1.2:
1.5 Captulo 1: El Lenguaje C# y el Framework .NET


-Windows Presentation Foundation (WPF): este permite obtener una mejor apariencia
de las aplicaciones Windows o web, usando para eso XAML (un lenguaje basado en
XML).

-Windows Communitation Foundation (WCF): este componente permite la
intercomunicacin de aplicaciones .NET

-Windows Workflow Foundation (WWF): este componente permite la definicin,
ejecucin y gestin de flujos de trabajo (workflows).


Figura 1.2



1.6 Captulo 1: El Lenguaje C# y el Framework .NET


No todas las versiones de .NET Framework se pueden instalar en todas las versiones
de Windows:

- v1.0: es soportada en Windows 98, NT 4.0, 2000, y XP
- v1.1: es soportada en Windows 98, NT 4.0, 2000, XP y Server 2003.
- v2.0: es soportada en Windows 98, 2000, XP, Server 2003, incluida por defecto en
Windows Vista y Server 2008.
- v3.0: es soportada en Windows XP SP2, Server 2003, incluida por defecto en Vista y
Server 2008.
- v3.5: es soportada en Windows XP SP2, Server 2003, Vista y Server 2008.

Por cierto que con Windows Vista ha salido ya el .Net Framework 3.0.

Existe un proyecto que est tratando de llevar esta arquitectura al mundo de Linux. Este
proyecto se llama Mono, y puedes encontrar informacin en la siguiente liga electrnica:
http://www.mono-project.com/Main_Page


1.2 Common Language Runtime (CLR)

El CLR es el verdadero ncleo del Framework de .Net, ya que es el entorno de
ejecucin en el que se cargan las aplicaciones desarrolladas en los distintos lenguajes,
ampliando el conjunto de servicios que ofrece el sistema operativo estndar Win32. La
herramienta de desarrollo compila el cdigo fuente de cualquiera de los lenguajes
soportados por .Net en un mismo cdigo, denominado cdigo intermedio (MSIL,
Microsoft Intermediate Language). Para generar dicho cdigo el compilador se basa en
el Common Language Specification (CLS) que determina las reglas necesarias para
crear cdigo MSIL compatible con el CLR.

Es el ncleo de la plataforma .NET. Es el motor encargado de gestionar la ejecucin de
las aplicaciones para ella desarrolladas y a las que ofrece numerosos servicios que
simplifican su desarrollo y favorecen su fiabilidad y seguridad. Las principales
caractersticas y servicios que ofrece el CLR son:
Modelo de programacin consistente: A todos los servicios y facilidades
ofrecidos por el CLR se accede de la misma forma: a travs de un modelo de
programacin orientado a objetos. Esto es una diferencia importante respecto al
modo de acceso a los servicios ofrecidos por los algunos sistemas operativos
actuales (por ejemplo, los de la familia Windows), en los que a algunos servicios
se les accede a travs de llamadas a funciones globales definidas en DLLs y a
otros a travs de objetos (objetos COM en el caso de la familia Windows)
Modelo de programacin sencillo: Con el CLR desaparecen muchos
elementos complejos incluidos en los sistemas operativos actuales (registro de
Windows, GUIDs, HRESULTS, IUnknown, etc.) El CLR no es que abstraiga al
1.7 Captulo 1: El Lenguaje C# y el Framework .NET

programador de estos conceptos, sino que son conceptos que no existen en la
plataforma .NET
Eliminacin del infierno de las DLLs: En la plataforma .NET desaparece el
problema conocido como infierno de las DLLs que se da en los sistemas
operativos actuales de la familia Windows, problema que consiste en que al
sustituirse versiones viejas de DLLs compartidas por versiones nuevas puede
que aplicaciones que fueron diseadas para ser ejecutadas usando las viejas
dejen de funcionar si las nuevas no son 100% compatibles con las anteriores. En
la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las
viejas, de modo que las aplicaciones diseadas para ejecutarse usando las
viejas podrn seguir usndolas tras instalacin de las nuevas. Esto, obviamente,
simplifica mucho la instalacin y desinstalacin de software.
Ejecucin multiplataforma: El CLR acta como una mquina virtual,
encargndose de ejecutar las aplicaciones diseadas para la plataforma .NET.
Es decir, cualquier plataforma para la que exista una versin del CLR podr
ejecutar cualquier aplicacin .NET. Microsoft ha desarrollado versiones del CLR
para la mayora de las versiones de Windows: Windows 95, Windows 98,
Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE
(que puede ser usado en CPUs que no sean de la familia x86) Por otro lado
Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y tambin
hay terceros que estn desarrollando de manera independiente versiones de
libre distribucin del CLR para Linux. Asimismo, dado que la arquitectura del
CLR est totalmente abierta, es posible que en el futuro se diseen versiones del
mismo para otros sistemas operativos.
Integracin de lenguajes: Desde cualquier lenguaje para el que exista un
compilador que genere cdigo para la plataforma .NET es posible utilizar cdigo
generado para la misma usando cualquier otro lenguaje tal y como si de cdigo
escrito usando el primero se tratase. Microsoft ha desarrollado un compilador de
C# que genera cdigo de este tipo, as como versiones de sus compiladores de
Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) que
tambin lo generan y una versin del intrprete de JScript (JScript.NET) que
puede interpretarlo. La integracin de lenguajes es tal que es posible escribir una
clase en C# que herede de otra escrita en Visual Basic.NET que, a su vez,
herede de otra escrita en C++ con extensiones gestionadas.
Gestin de memoria: El CLR incluye un recolector de basura que evita que el
programador tenga que tener en cuenta cundo ha de destruir los objetos que
dejen de serle tiles. Este recolector es una aplicacin que se activa cuando se
quiere crear algn objeto nuevo y se detecta que no queda memoria libre para
hacerlo, caso en que el recolector recorre la memoria dinmica asociada a la
aplicacin, detecta qu objetos hay en ella que no puedan ser accedidos por el
cdigo de la aplicacin, y los elimina para limpiar la memoria de objetos basura
y permitir la creacin de otros nuevos. Gracias a este recolector se evitan errores
de programacin muy comunes como intentos de borrado de objetos ya
borrados, agotamiento de memoria por olvido de eliminacin de objetos intiles o
solicitud de acceso a miembros de objetos ya destruidos.
1.8 Captulo 1: El Lenguaje C# y el Framework .NET

Seguridad de tipos: El CLR facilita la deteccin de errores de programacin
difciles de localizar comprobando que toda conversin de tipos que se realice
durante la ejecucin de una aplicacin .NET se haga de modo que los tipos
origen y destino sean compatibles.
Aislamiento de procesos: El CLR asegura que desde cdigo perteneciente a
un determinado proceso no se pueda acceder a cdigo o datos pertenecientes a
otro, lo que evita errores de programacin muy frecuentes e impide que unos
procesos puedan atacar a otros. Esto se consigue gracias al sistema de
seguridad de tipos antes comentado, pues evita que se pueda convertir un
objeto a un tipo de mayor tamao que el suyo propio, ya que al tratarlo como un
objeto de mayor tamao podra accederse a espacios en memoria ajenos a l
que podran pertenecer a otro proceso. Tambin se consigue gracias a que no
se permite acceder a posiciones arbitrarias de memoria.
Tratamiento de excepciones: En el CLR todos los errores que se puedan
producir durante la ejecucin de una aplicacin se propagan de igual manera:
mediante excepciones. Esto es muy diferente a como se vena haciendo en los
sistemas Windows hasta la aparicin de la plataforma .NET, donde ciertos
errores se transmitan mediante cdigos de error en formato Win32, otros
mediante HRESULTs y otros mediante excepciones.
El CLR permite que excepciones lanzadas desde cdigo para .NET escrito en un
cierto lenguaje se puedan capturar en cdigo escrito usando otro lenguaje, e
incluye mecanismos de depuracin que pueden saltar desde cdigo escrito para
.NET en un determinado lenguaje a cdigo escrito en cualquier otro. Por
ejemplo, se puede recorrer la pila de llamadas de una excepcin aunque sta
incluya mtodos definidos en otros mdulos usando otros lenguajes.
Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en
mltiples hilos de ejecucin que pueden ir evolucionando por separado en
paralelo o intercalndose, segn el nmero de procesadores de la mquina
sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos,
destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificacin,
enviarles notificaciones, sincronizarlos, etc.
Distribucin transparente: El CLR ofrece la infraestructura necesaria para
crear objetos remotos y acceder a ellos de manera completamente transparente
a su localizacin real, tal y como si se encontrasen en la mquina que los utiliza.
Seguridad avanzada: El CLR proporciona mecanismos para restringir la
ejecucin de ciertos cdigos o los permisos asignados a los mismos segn su
prioridad o el usuario que los ejecute. Es decir, puede no darse el mismo nivel de
confianza a cdigo procedente de Internet que a cdigo instalado localmente o
procedente de una red local; puede no darse los mismos permisos a cdigo
procedente de un determinado fabricante que a cdigo de otro; y puede no darse
los mismos permisos a un mismo cdigos segn el usuario que lo est
ejecutando o segn el rol que ste desempee. Esto permite asegurar al
administrador de un sistema que el cdigo que se est ejecutando no pueda
poner en peligro la integridad de sus archivos, la del registro de Windows, etc.
1.9 Captulo 1: El Lenguaje C# y el Framework .NET

Interoperabilidad con cdigo antiguo: El CLR incorpora los mecanismos
necesarios para poder acceder desde cdigo escrito para la plataforma .NET a
cdigo escrito previamente a la aparicin de la misma y, por tanto, no preparado
para ser ejecutando dentro de ella. Estos mecanismos permiten tanto el acceso
a objetos COM como el acceso a funciones sueltas de DLLs preexistentes (como
la API Win32)
Como se puede deducir de las caractersticas comentadas, el CLR lo que hace es
gestionar la ejecucin de las aplicaciones diseadas para la plataforma .NET. Por esta
razn, al cdigo de estas aplicaciones se le suele llamar cdigo gestionado, y al cdigo
no escrito para ser ejecutado directamente en la plataforma .NET se le suele llamar
cdigo no gestionado.

1.3 Microsoft Intermediate Language (MSIL)
Los compiladores que generan cdigo para la plataforma .NET no crean cdigo
mquina para las diferentes plataformas hardware. Generan cdigo escrito en un
lenguaje intermedio denominado Microsoft Intermediate Language. Cuando decimos
que un compilador crea cdigo para la plataforma .NET, estamos diciendo que crea
cdigo MSIL, que es el nico lenguaje que es capaz de interpretar el CLR.
MSIL ha sido creado por Microsoft, despus de consultar a numerosos especialistas en
compiladores y lenguajes. Se trata de un lenguaje de un nivel de abstraccin ms
elevado que los lenguajes de cdigo mquina de las CPUs existentes, ya que permite
por ejemplo trabajar directamente con objetos (crearlos, destruirlos, inicializarlos, etc)
as como tablas y excepciones (lanzarlas, capturarlas y manejarlas). Hemos comentado
antes que el compilador de C#, desarrollado por Microsoft, genera cdigo fuente MSIL,
as como que Microsoft ha desarrollado extensiones de sus compiladores de Visual
Basic y C++ que generan tambin cdigo MSIL. Pero no son stos los nicos lenguajes
que generan cdigo MSIL, sino que son bastantes los lenguajes que han optado por
desarrollar una extensin que genere cdigo MSIL para la plataforma .NET, como por
ejemplo Fortran, Haskell, java, Pascal, Perl, Python, o Smalltalk. Como se puede
observar la oferta es bastante amplia, ya que debido a la arquitectura de la plataforma
.NET, podemos programar nuestra aplicacin en cualquiera de estos lenguajes,
accediendo a todos los servicios ofrecidos por el CLR.
Las principales ventajas del cdigo MSIL es que facilita la ejecucin multiplataforma y la
integracin entre lenguajes al ser independiente de la CPU. Sin embargo, dado que las
CPU's no pueden ejecutar directamente cdigo MSIL, es necesario convertirlo antes al
cdigo nativo de la CPU en la que vayamos a ejecutar nuestra aplicacin. De esto se
encarga un componente del CLR, denominado Compilador JIT (Just in Time). Este
compilador convierte dinmicamente el cdigo MSIL a cdigo nativo segn sea
necesario. Se distribuye en tres versiones principales: compilador JIT normal,
econmico y prejitter. El compilador JIT normal, es el que se suele usar por defecto.
ste slo compila el cdigo MSIL a cdigo nativo a medida que va siendo necesario, ya
que as se ahorra tiempo y memoria, al evitarse tener que compilar innecesariamente el
cdigo que nunca se va a ejecutar. El compilador JIT econmico funciona de forma
similar al compilador normal, solo que no realiza ninguna optimizacin de cdigo al
compilar, sino que traduce cada instruccin MSIL por su equivalente en el cdigo
1.10 Captulo 1: El Lenguaje C# y el Framework .NET

mquina sobre el que se ejecute la aplicacin. Est pensado para ser usado en CPUs
con poca potencia o memoria, ya que necesita menos tiempo para compilar y menos
memoria. Adems de las dos versiones anteriores del compilador JIT, Microsoft
distribuye una tercera versin llamada prejitter, que se distribuye como una aplicacin
en lnea de comandos mediante la cual es posible compilar completamente cualquier
ejecutable o biblioteca que contenta cdigo gestionado y convertirlo a cdigo nativo.
Tras conocer casi al completo la arquitectura .NET, ya sabemos que las aplicaciones
primero se convierten al lenguaje MSIL para posteriormente convertirlas al lenguaje
nativo de la arquitectura hardware donde se ejecuten. Podemos pensar que la actuacin
del compilador JIT puede disminuir el rendimiento de la aplicacin compilada, debido a
que debe invertirse un cuantum de tiempo adicional para volver a compilar la aplicacin
dependiendo de la arquitectura del procesador. Esto es cierto, pero comparndolo con
arquitecturas similares, como Java, resulta ser ms eficiente ya que cada cdigo no es
interpretado y compilado al lenguaje nativo cada vez que se ejecuta, sino que es
traducido una nica vez; cuando se llama al mtodo al que pertenece. Adems, el
hecho de que el compilador JIT tenga acceso en tiempo de ejecucin a la mquina
donde se ejecuta la aplicacin hace que posea mucha ms informacin de ella, por lo
que puede realizar ms optimizaciones que las que podra realizar cualquier compilador
tradicional.
El Microsoft IL (Intermediate Language) es el lenguaje de programacin que emiten, de
forma interna, los compiladores de lenguajes .NET, como VB.NET y C#. Nosotros
podemos escribir directamente en ese lenguaje, aunque, hay que admitirlo, no es una
tarea de todos los das. El aspecto de un programa escrito en IL es el de un texto,
donde cada rengln puede tener una instruccin simple. Nos recuerda el formato de
otros lenguajes de procesador. Pero hay que recordar, que el "procesador" para el cual
se escribe el IL, no existe: es slo el CLR, la mquina virtual de .NET, el que sabe cmo
interpretar y ejecutar el cdigo compilado IL.
1.11 Captulo 1: El Lenguaje C# y el Framework .NET


El lenguaje IL es el lenguaje base de .NET, los compiladores producen un ejecutable IL,
que puede tambin ser generado con ilasm, y desensamblado con ildasm.
Para manipular IL, Microsoft nos provee de dos herramientas gratuitas, incluidas en el
.NET Framework SDK: el lldasm, que nos permite desensamblar un ejecutable .NET, y
ver su cdigo IL, y el llasm, que dado un texto IL lo compila a ejecutable .NET.
Notablemente, .NET en su librera tiene funciones para la emisin de cdigo IL, desde
nuestros programas, lo cual nos permite generar ejecutables "en el momento",
capacidad que puede ser aprovechada creativamente.
1.4 Lenguaje de programacin C#

C# (pronunciado "si sharp") es un lenguaje de programacin orientado a objetos
desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que
despus fue aprobado como un estndar por la ECMA e ISO.

C# intenta aprovechar, en la medida de lo posible, las caractersticas de la plataforma
.NET. Este nuevo lenguaje, evolucin natural de Java y C++, tambin intenta facilitar a
los programadores el cambio de plataforma, por su parecida sintaxis al lenguaje Java.
Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET
el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (ms
notablemente de Delphi y Java). C# fue diseado para combinar el control de lenguajes
de bajo nivel como C y la velocidad de programacin de lenguajes de alto nivel como
Visual Basic.

Sus principales creadores son Scott Wiltamuth y Anders Heljslberg, ste ltimo conocido
por haber sido el diseador del lenguaje Turbo Pascal y la herramienta de diseo rpido
Delphi. En la plataforma .NET es posible escribir cdigo en muchos otros lenguajes,
1.12 Captulo 1: El Lenguaje C# y el Framework .NET

pero C# es el nico que ha sido diseado especficamente para ser utilizado en ella.
Utilizar este lenguaje para programar en ella es mucho ms sencillo e intuitivo que
hacerlo con cualquiera de los otros lenguajes que nos provee la plataforma .NET. Es
por esta razn que se suele decir que C# es el lenguaje nativo de .NET.

1.5 Antecedentes del lenguaje
Las batallas legales entre Microsoft y Sun Microsystems acerca de Java durante casi
cuatro aos llevaron a Microsoft a plantearse la necesidad de un nuevo lenguaje de
programacin. Mientras que Sun Microsystems sugera a Microsoft que asumiera los
trminos de licencia del lenguaje Java, Microsoft desarrollaba su propia versin de Java,
J++, basada en la tecnologa licenciada de Sun. La ltima versin de J++, la 7.0, no fue
tal, y Microsoft decidi lanzar C#, trabajando conjuntamente con el ECMA, para
estandarizar el lenguaje al mismo tiempo. Microsoft originalmente desarrollo un lenguaje
llamado COOL, que representaba nicamente una mejora del lenguaje C++. El
resultado signific la respuesta de Microsoft a la tecnologa Java de Sun Microsystems.

De hecho, la sintaxis y estructuracin de C# es muy similar a la de C++ y de Java, ya
que una de las intenciones de Microsoft era facilitar la migracin de cdigos escritos en
estos lenguajes a C#, y facilitar el aprendizaje a los desarrolladores habituados a ellos.
Sin embargo, su sencillez y el alto nivel de productividad son igualables a los de Visual
Basic. Un lenguaje que hubiese sido ideal para utilizar estas caractersticas hubiera sido
Java, pero debido a las inacabables batallas legales entre la empresa creadora de esta
tecnologa, Sun Microsystems, y Microsoft, ste ltimo ha tenido que desarrollar un
nuevo lenguaje que aadiese a las ventajas de Java las modificaciones que Microsoft
tena pensado para mejorar esta tecnologa, para convertirlo en un lenguaje orientado al
desarrollo de componentes.

En resumen, podemos afirmar que C# es un lenguaje de programacin que hereda las
principales virtudes de sus predecesores, como Java, C++ o incluso Visual Basic, y las
combina en un nico lenguaje. El hecho de que haya nacido hace poco no implica que
sea inmaduro: Microsoft ha escrito la mayor parte de la BCL (biblioteca de clases base)
usando este mismo lenguaje, por lo que es el ms depurado y optimizado de los
incluidos en la plataforma de desarrollo de .NET.

1.6 Caractersticas principales de C#
A continuacin enumeramos las principales caractersticas que definen al lenguaje de
programacin C#. Algunas de estas caractersticas no son propias del lenguaje, sino de
la plataforma .NET, aunque se listan aqu ya que tienen una implicacin directa en el
lenguaje.

Sencillez de uso C#
Elimina muchos elementos aadidos por otros lenguajes y que facilitan su uso y
compresin, como por ejemplo ficheros de cabecera, o ficheros fuentes IDL Interface
Definition Language, en ingls, lenguaje de definicin de interfaces. Es por ello que se
dice que C# es autocontenido. Adems, no se incorporan al lenguaje elementos poco
tiles, como por ejemplo macros, herencia mltiple u operadores diferentes al operador
1.13 Captulo 1: El Lenguaje C# y el Framework .NET

de acceso a mtodos (operador punto) para acceder a miembros de espacios de
nombres.

Modernidad
Al ser C# un lenguaje de ltima generacin, incorpora elementos que se ha demostrado
a lo largo del tiempo que son muy tiles para el programador, como tipos decimales o
booleanos, un tipo bsico string, as como una instruccin que permita recorrer
colecciones con facilidad (instruccin foreach). Estos elementos hay que simularlos en
otros lenguajes como C++ o Java.

Orientado a objetos
C# como lenguaje de ltima generacin, y de propsito general, es orientado a objetos.
C# no permite la inclusin de funciones ni variables globales que no estn incluidos en
una definicin de tipos, por lo que la orientacin a objetos es mas pura y clara que en
otros lenguajes como C++. Adems, C# soporta todas las caractersticas del paradigma
de la programacin orientada a objetos, como son la encapsulacin, la herencia y el
polimorfismo.
En lo referente a la encapsulacin es importante sealar que aparte de los tpicos
modificadores public, private y protected, C# aade un cuarto modificador llamado
internal, que puede combinarse con protected e indica que al elemento a cuya definicin
precede slo puede accederse desde su mismo ensamblado.
Respecto a la herencia -a diferencia de C++ y al igual que Java- C# slo admite
herencia simple de clases ya que la mltiple provoca ms quebraderos de cabeza que
facilidades y en la mayora de los casos su utilidad puede ser simulada con facilidad
mediante herencia mltiple de interfaces. De todos modos, esto vuelve a ser ms bien
una caracterstica propia del CTS que de C#.

Orientado a componentes
La propia sintaxis de C# incluye elementos propios del diseo de componentes que
otros lenguajes tienen que simular mediante construcciones ms o menos complejas.
Es decir, la sintaxis de C# permite definir cmodamente propiedades (similares a
campos de acceso controlado), eventos (asociacin controlada de funciones de
respuesta a notificaciones) o atributos (informacin sobre un tipo o sus miembros).

Recoleccin de basura
Todo lenguaje incluido en la plataforma .NET tiene a su disposicin el recolector de
basura del CLR. Esto implica que no es necesario incluir instrucciones de destruccin
de objetos en el lenguaje.

Seguridad de tipos
C# incluye mecanismos de control de acceso a tipos de datos, lo que garantiza que no
se produzcan errores difciles de detectar como un acceso a memoria de ningn objeto,
por ejemplo. Para ello, el lenguaje provee de una serie de normas de sintaxis, como por
ejemplo no realizar conversiones entre tipos que no sean compatibles. Adems, no se
pueden usar variables no inicializadas previamente, y en el acceso a tablas se hace una
comprobacin de rangos para que no se excedan ninguno de los ndices de la misma.
Se puede controlar as mismo los desbordamientos en operaciones aritmticas,
producindose excepciones cuando se produzcan.
1.14 Captulo 1: El Lenguaje C# y el Framework .NET


Instrucciones seguras
Para evitar errores comunes como se producan programando en otros lenguajes, en C#
se han impuesto una serie de restricciones en el uso de instrucciones de control mas
comunes. Por ejemplo, la evaluacin de toda condicin ha de ser una expresin
condicional y no aritmtica, como ocurra por ejemplo en C o en C++. As se evitan
errores por confusin del operador igualdad con el de asignacin. Otra restriccin que
se impone en la instruccin de seleccin switch, imponiendo que toda selectora de la
instruccin finalice con una instruccin break o goto que indique cul es la siguiente
accin a realizar.

Unificacin de tipos
En C# todos los tipos derivan de una superclase comn llamada System.Object, por lo
que automticamente heredaran todos los miembros definidos en esta clase. Es decir,
son objetos. A diferencia de Java, en C# esta caracterstica tambin se aplica para los
tipos bsicos.

Gestin automtica de memoria
Como ya se coment, todo lenguaje de .NET tiene a su disposicin el recolector de
basura del CLR. Esto tiene el efecto en el lenguaje de que no es necesario incluir
instrucciones de destruccin de objetos. Sin embargo, dado que la destruccin de los
objetos a travs del recolector de basura es indeterminista y slo se realiza cuando ste
se active ya sea por falta de memoria, finalizacin de la aplicacin o solicitud explcita
en el fuente-, C# tambin proporciona un mecanismo de liberacin de recursos
determinista a travs de la instruccin using.

Eficiente
En principio, en C# todo el cdigo incluye numerosas restricciones para asegurar su
seguridad y no permite el uso de punteros. Sin embargo, y a diferencia de Java, en C#
es posible saltarse dichas restricciones manipulando objetos a travs de punteros. Para
ello basta marcar regiones de cdigo como inseguras (modificador unsafe) y podrn
usarse en ellas punteros de forma similar a cmo se hace en C++, lo que puede resultar
vital para situaciones donde se necesite una eficiencia y velocidad procesamiento muy
grandes.

Compatible
Para facilitar la migracin de programadores, C# no slo mantiene una sintaxis muy
similar a C, C++ o Java que permite incluir directamente en cdigo escrito en C#
fragmentos de cdigo escrito en estos lenguajes, sino que el CLR tambin ofrece, a
travs de los llamados Platform Invocation Services (PInvoke), la posibilidad de acceder
a cdigo nativo escrito como funciones sueltas no orientadas a objetos tales como las
DLLs de la API Win32. Ntese que la capacidad de usar punteros en cdigo inseguro
permite que se pueda acceder con facilidad a este tipo de funciones, ya que stas
muchas veces esperan recibir o devuelven punteros.

En resumen este es el marco de trabajo .NET
1.15 Captulo 1: El Lenguaje C# y el Framework .NET

Вам также может понравиться