c# fundamentos

La potencia de la Reflexión en C# (Parte 2: Ensamblados)

 ¿Qué es c#?

 

C# es un lenguaje fuertemente tipado orientado a objetos. Es un lenguaje de alto nivel que cuenta con múltiples características, tales como: recolector de basura, tipos nuleables, manejo de excepciones, junto expresiones lambda para el soporte de técnicas de programación funcional.

A su vez, en características más avanzadas como LINQ que provee sintáxis para operar con datos provinientes de algún recurso. El lenguaje soporta las operaciones asíncronas.


Tipado en C#

Todos los tipos en c# derivan de una misma raíz: object, por esto todos los tipos tiene una serie de métodos comunes. C# soporta dos tipos de valores: referencias y valores, por ejemplo el tipo string es una referencia a char; la diferencia es que mientras un valor de referencia simplemente apunta a un valor, el valor contiene los datos. Esto sucede ya que las referencias y los valores son almacenados en distintas partes de la memoria RAM.

    - Tipos y miembros

Clases y objetos: Una clase es el tipo más importante es c#, es una estructura de datos que almacena estados (fields) y acciones (methods) en una única unidad, los objetos son instancias de una clase. La manera más cercana de interpretar una clase en el mundo real es como un molde y el objeto como un elemento proviniente de dicho molde.

Las clases dentro de su cuerpo, pueden contener un constructor el cual permite definir valores por defecto a una instancia u objeto de alguna clase.

Tipos como parámetos: Una peculiar manera en la que podemos pasar como parámetros los tipos que adjuntaremos a alguna clase. A este tipo de clase se le denomina generic class type.

Herencia y clases base: En ocasiones querrémos "heredar" fields o methods de una clase existente a otra, la clase heredera se le denomina clase base. Aquí llegamos a un problema, y es que solamente podemos tener una sola clase base, por tanto si deseamos heredar de múltiples clases no podremos hacerlo sin complicar extremadamente el programa, para esto existen las interfaces. 

Interfaces: Una interfaz define un "contrato" de lo mínimo que una clase debe tener en su cuerpo, las interfaces pueden ser herederas de múltiples otras interfaces.

Otros tipos: Los siguientes son tipos usados en casos muy especificos.

- Struct: Es parecido a las clases, su próposito es almacenar datos. Son más ligeros que una clase, pero no existe la herencia en este tipo.

- Enums: Declaran una serie de valores constantes, que pueden ser accedidos por un código entero.

- Tipos nuleables: Como se infiere, este tipo puede recibir un valor nulo (null), lo cual significa que nada se almacena allí.


Building blocks

// DEFINICIÓN

Los tipos en c# están hechos usando los siguientes building blocks:

- Miembros

Los miembros de una clase pueden ser estáticos o de instancia, los miembros estáticos pertenecen a las clases y los instanciables a objetos (las instancias de lass clases).

Una clase puede contener distintos tipos de valores como constantes, campos, propiedades...

Y comporamientos como metódos.

Los metódos pueden contener una serie de parámetros.

Podemos definir como se dará la herencia de metódos usando los prefijos virtual, override y abstract. Ya que al poder una clase derivar de otra clase base, la clase heredera podría necesitar modificar el comportamiento de algún metódo heredado.

Un metódo virtual, es declarado en la clase base y las clases herederas podrán crear un comportamiento más especifico.

Un metódo override, modifica el comportamiento de la implementación de la clase base de aquel metódo.

Un metódo abstract, debe ser declarado en la clase base y debe ser sobreescrito en todas las clases herederas.

Si queremos tener metodos abstractos debemos declarar una clase como abstracta, esta clase servirá como miembros comunes entre clases herederas.

Clases abstractas vs Interfaces

Es una confusión comprensible ya que si en una clase abstracta modificamos todos los miembros quedará algo parecido a una interface, pero esto es un grave error de diseño ya que si en algún momento necesitamos que una clase concreta herede de varias clases abstractas no será posible. C# no soporta múltiple herencia de clases.

En cambio en interfaces si existe la múltiple herencia haciendo las cosas más sencillas, y es que las clases abstractas no son un suplemento de interfaz es una clase que sirve como lógica común o metódos en común entre clases herederas.

El diseño general de entidades en caso de implementar interfaces, clases abstractas y concretas debería ser de la siguiente manera:



- Expresiones

- Declaraciones


Abstracción 

Puede definirse como las características especifícas de un objeto que lo diferencia de otros tipos de objetos, logrando así límites conceptuales.

Una abstracción se enfoca en el comportamiento de un objeto separando el "¿Cómo lo hace?" y quedándose unicamente con la idea de "¿Qué hace?".

 

¿Qué es .NET y como se relaciona con C#?

 

.Net es un ecosistema de desarrollo de aplicaciones, esto quiere decir que no es un lenguaje sino un set de herramientas para facilitar el desarrollo en c#.

Una descripción más exacta de .Net es que, es un entorno de ejecución llamado Common Language Runtime (CLR), CLR es la implementación de un estándar Common Language Infrastructure (CLI) establecidos ambos por mano de Microsoft. CLI es la base para que lenguajes y librerías puedan trabajar juntos.

El código escrito en c# se compila en un lenguaje intermediario (IL) conforme al estándar CLI, el código IL y otros recursos son almacenados en un assembly, el assembly es lo que queda luego de compilar el código con extensión .cs y estos contienen una extensión .dll ó .exe.

Cuando el programa es ejecutado, el assembly es cargado dentro del runtime (CLR) que realiza compilación JIT (Just In Time) para convertir el código intermedio (IL) en instrucciones máquina.

El código IL es conforme a la especificación Common Type Specification (CTS), hay más de 20 lenguajes de la familia CTS por lo que el código escrito en cualquiera de estos lenguajes puede interactuar sin problemas ya que finalmente será traducido a IL.

Publicar un comentario

Artículo Anterior Artículo Siguiente