[.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

Anuncios

[.NET] Mis interfaces favoritos: IDisposable


Siguiendo con la serie de Mis interfaces favoritos, en esta entrega conoceremos a nuestro amado interfaz IDisposable.
Como ya dijimos en post anteriores, .NET usa dos zonas de memoria llamadas Heap y Stack.

  • En el Stack se almacenan los Value Types, que son básicamente los tipos básicos definidos por el Framework. Esta zona de memoria generalmente la gestiona el propio sistema operativo.
  • En el Heap se almacenan los datos reales de los Reference Types, zona de memoria que gestiona automáticamente el motor en tiempo de ejecución de .NET, el Common Language Runtime (CLR). Esta gestión de memoria automática se denomina Garbage Collection y el “problema” que tenemos es que no es posible controlar la liberación y recuperación de los objetos en el 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

[.NET] Mis interfaces favoritos: IComparable


Este es el primer post sobre aquellos interfaces de la plataforma .NET que a mi juicio son más interesantes y que más aplicaciones pueden tener a la hora de desarrollar un proyecto.

Empezaremos con el interfaz IComparable y su versión genérica IComparable<T> cuya misión es proporcionar un método de comparación de dos objetos de un tipo particular. Como sugiere el nombre, IComparable<T> compara la instancia actual de un objeto con otro y define una interfaz con un método CompareTo() que toma como parámetro un objeto del mismo tipo y compara el objeto actual con éste. Es útil cuando sólo hay una forma lógica o forma predeterminada común de comparar los objetos de un tipo e implícitamente se implementa los operadores de comparación <, >, <= y >=.

Seguir leyendo

[EVENTO] Microsoft dotNet Spain Conference 2016


Al igual que en el año 2015 se celebró el mayor evento de .NET en España, este año tienes una cita para la última edición de este eventazo.

Estará compuesto de 8 tracks con sesiones de más de una hora para desarrollo Web, Apps, IoT, Cloud, Videogames… Además, por primera vez, habrá un track especial en que se mostrarán la arquitectura técnica de algunas soluciones implementadas con .NET en el mundo real.

 ¿Dónde y cuándo se desarrollará el evento?

El evento tendrá lugar el 24 de febrero de 2016 en los Kinepolis Madrid Ciudad de la Imagen, un sitio perfecto con muchas pantallas gigantes, asientos cómodos y espaciosos para poder disfrutar de este evento como tanto se merece.

Para más información, inscribiros o mandar vuestras propuestas de sesiones, podéis visitar el enlace dotNet Spain Conference 2016

 

[.NET] Novedades de System.Security.Cryptography en el .NET Framework 4.6


En este post veremos las novedades referentes al sistema de criptografía incluido en la versión 4.6 de la plataforma .NET Framework.

Como bien sabemos, .NET Framework nos provee de varias clases que implementan los algoritmos criptográficos más utilizados y en esta versión del Framework posee mejoras para el  soporte para Windows CNG cryptography APIs:

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