Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion Al Lenguaje C# PDF
Introduccion Al Lenguaje C# PDF
Introduccin.
C# es un lenguaje orientado a objetos (es ms correcto decir orientado a componentes)
diseado para el CLR (Common Language Runtime) de la plataforma .NET que se
llam en un principio NGWS, es decir, Next Generation Windows Services.
Visual Studio.NET soporta esta plataforma y tambin el lenguaje C#, as como C++,
Visual Basic y los lenguajes de script VBScript y JScript.
Por ejemplo: se eliminan los punteros (es posible utilizarlos en un cdigo llamado
inseguro), las macros, las plantillas, la herencia mltiple, los ficheros de cabecera, IDL,
libreras de tipos... Adems se aaden otras caractersticas, como orientacin a objetos
casi pura, seguridad de tipos, versiones, gestin automtica de memoria (garbage
collector)...
1/13 1
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
los punteros a funciones, con la ventaja de ser ms seguro y respetar los tipos de
datos.
- Se cambian ciertos aspectos referentes a los operadores:
o No se utilizan los operadores -> ni ::. El nico operador de acceso a
mtodos de objetos que se utiliza es el operador punto . .
o Se incluyen dos operadores nuevos: is y typeof.
o Se cambia el funcionamiento de los operadores lgicos &, ^ y |.
o La sobrecarga de operadores es diferente.
- Hay ciertas palabras clave que se utilizan de modo distinto, como extern y
static.
- El mtodo Main se declara de modo distinto.
- No se permiten las declaraciones adelantadas (forward).
- El manejo de errores se hace mediante excepciones.
- No se soportan las macros, aunque s las directivas de preprocesador.
- No se utilizan ficheros de cabecera (.h) ni similares (IDL y libreras de tipos). El
cdigo es compilado en unidades llamadas assemblies, en las cuales se almacena
la representacin del cdigo en un lenguaje intermedio llamado IL y los
metadatos, que sustituyen a los ficheros .h de C++ (o a las libreras de tipos y
entradas de registro). Los assemblies se pueden generar a partir de cdigo escrito
en otros lenguajes, como C++ o Visual Basic, lo cual quiere decir que desde C#
se puede utilizar cdigo IL generado a partir de otros lenguajes.
- Los assemblies se agrupan en namespaces (que siguen una estructura
jerrquica).
- No existe una librera de tiempo de ejecucin (Runtime) C# como en C y C++.
En su lugar existe un Runtime .NET accesible a travs de la clase System.
- El mecanismo de herencia sufre cambios:
o No se permite herencia mltiple en clases pero s en interfaces.
o La sobrescritura de mtodos se ha de hacer utilizando el operador
explcito override.
o El modificador new permite ocultar miembros heredados.
- Existen tres posibles grupos de tipos:
o Tipos valor: son tipos primitivos como char, int, struct... C# incluye
dos tipos nuevos, boolean (True o False, se utiliza en las sentencias
condicionales, en lugar de integer, como se haca en C++) y decimal
(para operaciones financieras). Las variables de tipo valor se guardan en
la pila.
o Tipos referencia: incluye los tipos class, interface, delegate y
array. Los objetos referenciados por variables de tipo referencia se
guardan en el heap o montn. Existen dos tipos de referencia
predefinidos, object y string. object es el tipo base de la jerarqua de
clases .NET. Todo dato deriva del tipo object mediante herencia simple
(slo se permite herencia mltiple de interfaces). Todo dato de cualquier
otro tipo puede convertirse a object (a esta conversin se la llama
boxing) permitindose tambin la operacin inversa (unboxing). Esto
permite la existencia de lo que se denomina sistema de tipos unificado.
o Tipos puntero: slo se permite su utilizacin en cdigo inseguro.
- Las sentencias sufren ciertos cambios y aparecen otras nuevas:
o La sentencia switch admite string.
o La sentencia foreach se puede aplicar a tipos y colecciones.
2/13 2
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Por ltimo, C# permite la interoperacin con otros lenguajes en base a las siguientes
caractersticas:
- Acceso a libreras a travs de COM+ y los servicios .NET.
- Soporte XML para interaccin basada en componentes.
- Simplificacin de la administracin y desarrollo de aplicaciones y componentes
gracias a un cuidado mecanismo de versiones.
3/13 3
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
La plataforma .NET
Podra pensarse en la plataforma .NET como un sustituto de la arquitectura Windows
DNA (Distributed Network Architecture) pero sera una comparacin insuficiente. La
arquitectura DNA se centra en la construccin de aplicaciones de tres capas para
Windows basndose en tecnologas como ASP, COM, etc...
El CLR ofrece las bases para poder ejecutar los servicios. Las clases base ofrecen el
control de tipos de datos bsico, las clases de tipo coleccin y de otras clases generales.
Los servicios de datos permiten el acceso a los datos desde los servicios Web y
Windows, para lo cual tienen clases de soporte de datos y XML.
4/13 4
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
La ventaja que implica soportar un lenguaje intermedio es que las aplicaciones que se
ejecutan sobre el CLR son portables. Al no depender de una mquina concreta, slo
necesitan para ejecutarse sobre cualquier mquina que el CLR est instalado en tal
mquina.
Como todo entorno de ejecucin, el CLR se ayuda de una librera de clases para ofrecer
una serie de servicios a los desarrolladores, permitiendo que puedan desarrollar
aplicaciones sencilla y rpidamente reutilizando componentes as como que puedan
desarrollar componentes reutilizables.
5/13 5
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Metadatos.
Para permitir al CLR ofrecer servicios al managed code los compiladores no slo han
de generar el cdigo IL correspondiente al cdigo fuente, sino tambin metadatos, los
cuales se almacenarn junto con el cdigo intermedio IL y harn innecesario el registro
del sistema (los metadatos son a la plataforma .NET lo que las bibliotecas de tipos, las
entradas del registro del sistema y algn que otro dato son a COM). Para un objeto de la
plataforma .NET, los metadatos guardan informacin necesaria para utilizar el objeto,
como puede ser:
6/13 6
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
El CLR utilizar los metadatos para localizar y cargar clases, resolver invocaciones a
mtodos, generar cdigo nativo, gestionar la seguridad, manejar las instancias de clases
y fijar los lmites del contexto de tiempo de ejecucin.
Assemblies.
El CLR trabaja realmente con assemblies. Un assembly es un fichero con un formato
muy parecido al formato PE (el que se utiliza en los ficheros .exe o .dll tradicionales)
que contiene el cdigo IL resultado de compilar el cdigo fuente, los metadatos y otros
ficheros necesarios para poder ejecutar el paquete o assembly. Adems, un assembly
contiene un fichero llamado fichero de manifiesto o manifest, el cual indica los
assemblies de los que depende, los ficheros que contiene, controla los tipos y recursos
expuestos por el assembly y establece un mapeo entre esos tipos y recursos y los
ficheros que contienen esos tipos y recursos.
El CLR provee APIs que los motores de scripts pueden utilizar para crear
dinmicamente un assembly a partir de un script. A este tipo de assemblies se les llama
assemblies dinmicos y podra ser considerado como un tercer tipo.
7/13 7
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Como puede verse, el fichero de manifiesto (manifest) puede ser almacenado de varios
modos:
- Para un assembly de un fichero, el manifiesto es incorporado al fichero PE.
- Para un assembly de varios ficheros, el manifiesto puede almacenarse como un
fichero separado o puede incorporarse en uno de los ficheros PE del assembly.
El assembly que contiene los tipos bsicos del CLR se llama mscorlib.dll y es el
nico que se toma por defecto al compilar. Si se desea utilizar un tipo que est en otro
assembly, ha de indicarse al compilador el nombre de tal assembly.
Namespaces.
As como un assembly es una agrupacin fsica de clases, otros tipos e informacin
sobre tales, un namespace es una agrupacin lgica. De este modo, al escribir el cdigo
de una aplicacin y utilizar clases y otros tipos se ha de indicar (en el cdigo) el
namespace al que pertenecen tales tipos, no el assembly. Como se ha comentado, el
assembly se ha de pasar como parmetro al compilador.
La lgica que lleva a esta separacin es muy sencilla. Supngase que se crean 5
assemblies con tipos relacionados con el manejo de redes. Aunque fsicamente son 5
ficheros distintos, lgicamente se refieren al mismo tema, de modo que podran estar
agrupados bajo un mismo nombre lgico (ntese que namespace significa espacio de
nombre).
De modo similar, un assembly puede contener clases y tipos dispares que puedan ser
divididos en varios namespace. De hecho, tal es el caso del assembly mscorlib.dll en
el que uno de sus namespace es System. El namespace System incluye los tipos de bajo
nivel bsicos, como el tipo base Object, Byte, Int32, Math y Delegate.
8/13 8
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Los namespace forman una jerarqua lgica, lo cual quiere decir que se pueden anidar.
Por ejemplo, dentro del namespace System se encuentra el namespace Collections
que incluye tipos como ArrayList, BitArray, Queue y Stack.
Se podra pensar, recordando que un assembly puede ser partido en varios ficheros, que
el assembly puede tambin realizar la funcin del ejemplo comentado. Visto as es
cierto, pero el hecho de partir un assembly en varios ficheros se realiza por motivos de
eficiencia en la transmisin de slo parte del assembly, no por motivos de organizacin
lgica.
Attributes.
Para poder convertir una clase en un componente es necesaria informacin adicional
sobre la clase como:
Los atributos no son valores concretos y son extensibles, lo cual puede hacerlo el propio
programador.
9/13 9
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Esta conversin se realiza una sola vez, si se vuelve a invocar durante la ejecucin un
cdigo ya compilado a cdigo nativo, se utiliza el cdigo nativo.
Por defecto no se elige la opcin de compilar todo el assembly a nativo, ya que implica
un coste de tiempo que en la mayora de los casos no se ve justificado, ya que es raro
que se ejecute todo el cdigo del assembly en una ejecucin concreta.
Segn lo comentado, la ejecucin del cdigo intermedio de un assembly por parte del
CLR es algo as:
Por ejemplo: el CTS permite a un tipo clase contener cero o ms miembros, los cuales
pueden ser campos, mtodos, propiedades o eventos.
10/13 10
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
Al intentar llevar a cabo esta interoperabilidad entre lenguajes el primer problema que
aparece son las diferencias que hay entre los diversos lenguajes. Para salvar este
11/13 11
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
problema a la hora de crear tipos .NET que sean fcilmente accesibles desde otros
lenguajes de programacin es necesario utilizar caractersticas de cada lenguaje que
sean compatibles con los dems. Para hacer esta labor ms sencilla, Microsoft ha
definido el CLS, que informa a los proveedores de compiladores del conjunto mnimo
de caractersticas que han de soportar sus compiladores para adaptarse al CLR.
Se dice que un tipo es compatible con el CLS si todas sus partes accesibles
pblicamente:
- Estn compuestas slo por tipos compatibles con el CLS.
- En caso de que alguna no est compuesta por tipos compatibles con el CLS ha
de estar marcada explcitamente como no compatible con el CLS.
Se dice que una herramienta es un consumidor compatible con el CLS si puede utilizar
ntegramente cualquier tipo compatible con el CLS, es decir, llamar a cualquier mtodo
compatible con el CLS, crear una instancia de cualquier tipo compatible con el CLS,
leer y modificar cualquier campo compatible con el CLS, etc...
Por ltimo, se dice que una herramienta es un extensor compatible con el CLS si es un
consumidor compatible con el CLS y adems puede extender cualquier clase base
compatible con el CLS, implementar cualquier interface compatible con el CLS, definir
nuevos interfaces compatibles con el CLS y situar cualquier atributo compatible con el
CLS en todos los elementos de metadatos apropiados.
El VES ofrece los servicios necesarios para ejecutar managed code y managed data,
as como utilizar los metadatos para conectar en tiempo de ejecucin (enlace tardo o
late binding) mdulos que han sido generados por separado.
Verificacin y Seguridad.
La seguridad es inherente al diseo de la plataforma .NET. Entra en accin tan pronto
como una clase es cargada realizando chequeos para verificar el cdigo (seguridad de
tipos...).
Tras los chequeos controla el acceso del cdigo a los recursos. La seguridad de la
plataforma .NET ofrece mecanismos para controlar la identidad y las posibilidades del
cdigo. Estos mecanismos alcanzan los lmites del contexto, del proceso y de la
mquina para asegurar la seguridad de los datos en escenarios remotos. Estos
mecanismos de seguridad trabajan y extienden los mecanismos de seguridad del
Sistema Operativo.
12/13 12
Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#
13/13 13