[.NET] ¿Qué son las Static Classes?


Una static class es aquella clase que se usa sin necesidad de realizar una instanciación de la misma. Se utiliza como una unidad de organización para métodos no asociados a objetos particulares y separa datos y comportamientos que son independientes de cualquier identidad del objeto.
Las clases estáticas son adecuadas cuando no tienen que almacenar información, sino sólo realizar cálculos o algún proceso que no cambie. Los datos de miembros estáticos se almacenan en una zona especial del Heap denominado High Frequency Heap.

Seguir leyendo

[C#] C# 7. Las nuevas características de nuestro lenguaje favorito.


La verdad es que el equipo de producto de C# está trabajando a un ritmo impresionante. No sólo acabamos de aterrizar en la versión 6 de C# si no que ya se está preparando la versión 7 con nuevas y jugosas mejores características.

Paso a resumir aquellas que para mí son más importantes (por ahora son todas propuestas), las cuales podéis ver en C# 7 Work List of Features #2136

Seguir leyendo

[C#] Cómo implementar la (de)serialización personalizada.


La serialización es el proceso de convertir un objeto en un stream de bytes para poder ser persistido en una base de datos, en un fichero o preservarlo en memoria. El proceso inverso, convertir el stream de bytes en un objeto, se denomina deserialización.

Existen dos tipos de serialización:

  • Binary serialization: Serializa un objeto a un formato binario. Con este tipo de serialización se puede enviar un objeto al disco, a memoria, etc…
  • XML serialization: Serializa un objeto a un formato XML en el cual únicamente se tienen en cuenta las propiedades públicas. Esta forma de serializar es muy útil para compartir información a través de servicios web empleando SOAP.

En este post no me detendré en explicar cómo (de)serializar de forma básica un objeto, si no que veremos cómo se puede controlar de forma personalizada la (de)serialización de un objeto.

Seguir leyendo

[C#] Cómo hacer llamadas asíncronas usando Delegates.


Uno de los usos más comunes de los delegados son las llamadas a métodos asíncronas, esto es, se puede realizar una invocación a un método y volver al hilo principal inmediatamente mientras el delegado se ejecuta en un hilo separado. El delegado se ejecuta en paralelo al hilo llamador y cuando dicho delegado termina su trabajo, se realiza una llamada callback al llamante informando de su finalización.

Seguir leyendo

[.NET] Qué es un Delegate y su implementación en C# (y II).


En el anterior post vimos la definición de delegate, qué características tiene y vimos también las diferentes formas de instanciarlos. En el siguiente post veremos qué es un Multicast delegate y los diferentes tipos de Generic delegate.

¿Qué es un Multicast delegate?

Un Multicast delegate es un delegado el cual mantiene referencias a más de un método. Este tipo de delegado debe contener únicamente métodos que devuelvan un void, de otro modo se lanzará una excepción en tiempo de ejecución. Al invocar al delegado, se ejecutarán todos los métodos asociados en el mismo orden en el cual fueron agregados al delegado.

Para agregar métodos al delegado se emplea el operador  ‘+=’ y para eliminar métodos del delegado se emplea el operador ‘-=’. Un mismo método se puede añadir a un objeto delegado más de una vez.

Seguir leyendo

[.NET] Qué es un Delegate y su implementación en C# (I).


En el siguiente post veremos la definición de un delegate y cómo se implementa en C#, qué características tienen y las diferentes maneras que existen de instanciarlos.

¿Qué es un delegate?

Un delegate es un tipo que representa referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto. Es la versión de .NET de los punteros a función de C++ pero con seguridad de tipos (type-safe), es decir, se comprueban los tipos de retorno y de los parámetros del mismo. La clase de delegado no sólo contiene una referencia a un método, también puede mantener referencias a varios métodos mientras cumplan con la firma definida.

Seguir leyendo

[.NET] Qué son los Generics y su implementación en C# (y II).


En el anterior post vimos el concepto y las ventajas que tienen los Generics. Hoy veremos cómo emplear generics en clases, métodos, interfaces y delegados, y también conocer las características que tienen.

Qué es un parámetro de tipo genérico

Es un contenedor para un tipo de dato específico usado al crear una instancia de una variable generic. Por convención, los parámetros de tipo genérico vienen prefijados con la letra T y deben ser únicos en la declaración para evitar conflictos de nombres en la implementación.

Por ejemplo tenemos la siguiente declaración

public class List<T> {
   private T[] elements;
}

Como podemos observar, se puede usar el parámetro de tipo genérico (en nuestro caso T) en cualquier parte en la que se espera un tipo específico.

Así, si definimos una lista de enteros de la siguiente forma

List<int> miLista = new List<int>;

Dentro de la implementación, nuestro parámetro de tipo genérico se sustituye por el tipo específico int.

private int[] elements;

Generics

Seguir leyendo

[.NET] Qué son los Generics y su implementación en C# (I).


Desde la versión 2.0 del .NET Framework tenemos soporte para Generics. Con Generics se pueden crear clases o métodos que son independientes de su tipo contenido. En vez de escribir métodos o clases con la misma funcionalidad para diferentes tipos, se puede crear únicamente un método o una clase para ello.

Otra opción para reducir nuestro código es el uso de la clase Object. Sin embargo el problema de emplear dicha clase es que no es type-safe, es decir no se hace comprobación de tipos. Las clases genéricas hacen uso de tipos genéricos que son reemplazados por tipos específicos cuando se requiera. Esto permite la comprobación de tipos durante la compilación.

Los generics no sólo se pueden usar en clases sino también se pueden emplear en métodos, interfaces, delegados, etc.

Algunas ventajas del empleo de Generics son:

  • Rendimiento.
  • Seguridad de tipos.
  • Reutilización de código.

Seguir leyendo

[.NET] Qué es un Reference Type.


¿Qué es un Reference Type?

Básicamente un Reference Type es aquel cuya variable almacena la dirección de memoria de sus datos en una zona de memoria denominada Stack. Los datos reales a los que hace referencia se encuentran en una zona de memoria llamada Heap.
Debido a que los reference types representan la dirección de los datos en lugar de los datos en sí mismo, asignar una variable de referencia a otra no copia los datos. En cambio, la asignación de una variable de reference type a otra instancia crea una segunda copia de la referencia, esto quiere decir que dos variables reference type pueden apuntar a los mismos datos.

Seguir leyendo