Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.
Mostrando entradas con la etiqueta microentradas. Mostrar todas las entradas
Mostrando entradas con la etiqueta microentradas. Mostrar todas las entradas

viernes, 25 de mayo de 2012

Reflexionando sobre genéricos

Ha llovido mucho desde que el Microsoft incorporase los genéricos en su .NET Framework . Fue en la versión 2.0, a finales del año 2005, y aunque sus beneficios se dejaron notar desde el primer momento entre la comunidad de desarrolladores y a día de hoy se usan con total normalidad, en ocasiones tenemos que pedirles “un poco más”. Por ejemplo, cuando el tipo de dato genérico no es conocido en tiempo de compilación y tenemos que inferirlo durante la ejecución de la aplicación.

Aunque no descubro nada bueno aquí, me he decidido a recuperar para el blog algunas de esas microentradas que antaño aparecían por aquí, buscando imprimir de nuevo un ritmo de publicaciones adecuado. Como hace poco tuve que usar técnicas de reflexión sobre genéricos y comprobé que apenas hay literatura en castellano sobre el tema, aquí van unas píldoras para ver cómo podríamos realizar algunas operaciones muy concretas en la situación que he descrito en el párrafo anterior.

Crear una clase genérica dinámicamente a partir de un objeto

Es muy sencillo usar una clase genérica y crear objetos de un determinado tipo en tiempo de compilación. Por ejemplo, si tenemos la clase
public class Data<T>
{
   public T Value { getset; }
}
podemos crear un objeto que contenga un entero simplemente así:
Data<int> data = new Data<int>();
data.Value = 1;
Para crear una clase genérica en tiempo de ejecución, esto es, sin definirla en el código durante la compilación, tendremos que jugar un poco con los tipos en .NET y con la clase Activator, que nos permite instanciar dinámicamente un objeto a partir de un tipo determinado. Así, podríamos conseguir crear un Data dinámicamente con el siguiente código:
Type dataType = typeof(Data<>);
Type genericType = dataType.MakeGenericType(value.GetType());
genClassesArray.Add(Activator.CreateInstance(genericType));

 

Obtener el tipo anidado de una clase genérica

Puede ocurrir que uno de nuestros métodos reciba un parámetro con un tipo dinámico (por ejemplo, un List) y queramos saber el tipo del dato genérico anidado. Esto se consigue con facilidad:
Type nestedType = value.GetType().GetGenericArguments()[0];

 

Llamar a un método genérico con el tipo de un dato obtenido en tiempo de ejecución

Por último, podríamos tener un método genérico y desear llamarlo dinámicamente, sin saber a priori el tipo anidado que estamos gestionando en esa ejecución de nuestro código. Por ejemplo, el siguiente método:
public Data<T> GetDataWithValue<T>(string stringValue)
{
return new Data<T>() { Value = (T)Convert.ChangeType(stringValue, typeof(T)) };
}
realiza una conversión (un casting) del valor recibido como string al tipo que se le indica y devuelve un tipo genérico Data con el valor indicado (pero con su tipo correspondiente). Para realizar la llamada sin conocer a priori el tipo T, tendremos que usar, ahora sí, objetos MethodInfo que se incluyen dentro de System.Reflection e invocar la llamada al método en cuestión. El uso de Convert.ChangeType() que vemos en el ejemplo es necesario al encontrarnos ante un valor expresado como una cadena de caracteres.

Podemos conseguir realizar la llamada dinámicamente, por ejemplo, así:
MethodInfo method = typeof(MyClassDemo).GetMethod("GetDataWithValue");
MethodInfo genericMethod = method.MakeGenericMethod(value.GetType());
var result = genericMethod.Invoke(thisnew object[] { value.ToString() });
Vemos que tendríamos que obtener el método a invocar del tipo que lo contiene (en este caso, una clase llamada MyClassDemo) y crear un método dinámico referido al tipo del objeto value que hemos recibido. A continuación, lo invocaríamos pasándole los parámetros en un array de objetos y con un primer parámetro que será nulo si el método es estático o el objeto del tipo MyClassDemo que realiza la llamada en caso contrario. En el ejemplo en cuestión se especifica el this porque se trata de una llamada a un método de la propia clase en la que estamos realizando las pruebas.

Y poco más. Como veis, a la potencia de los genéricos se le puede sacar mucho más partido si «reflexionamos» un poco sobre ellos. ;)

martes, 1 de mayo de 2012

1 de mayo

Siempre es buena la capacidad de reírse de uno mismo. El Día del Trabajo homenajeado desde la comedia en el mundillo informático.



viernes, 9 de abril de 2010

Pixels

Hay ocasiones en que, aunque nos falte el tiempo y parezca que tenemos todo abandonado, llega algo a nuestras vidas que nos hace recordar que somos como somos gracias a nuestra experiencia. Algo que a buen seguro muchos de vosotros compartís con un servidor y un motivo para volver a dar vida a este humilde blog. Disfrutadlo.




PIXELS by PATRICK JEAN.
Cargado por onemoreprod. - Videos de arte y animación.

domingo, 14 de marzo de 2010

Bonito homenaje de Google...

Al menos de Google España. Hoy se celebra el trigésimo aniversario del fallecimiento del mayor embajador de la naturaleza, Félix Rodriguez de la Fuente, y Google le recuerda en su logotipo.

lunes, 25 de enero de 2010

Lunes por la mañana, llegas a trabajar a primera hora y te encuentras con esto:



Empezamos bien... ¿Pero qué le he hecho yo a los hados? ¿Abro una incidencia para que lo resuelvan los chicos de Sistemas? ¿O le pregunto primero a Google?


Hecho lo segundo, te encuentras con la siguiente duda en un foro:

I cannot open the default profile in outlook 2007 since service pack 2 was installed on my vista ultimate 64-bit edition machine by windows update.  I receive the error "Cannot start Microsoft Office Outlook.  Cannot open the Outlook window."  I have created a new profile and it works ok, but would really like to get the settings from the other profile.  Is there anyway to recover this apparently "broken" profile?



Vaya, si es lo que me pasa a mí... Más o menos. El viernes instalé todas las actualizaciones de Windows para descartar un posible problema con aplicaciones desarrolladas en Visual C++ y hoy recibo el mensajito.¿La solución? Si os ocurre lo mismo, basta con arrancar Outlook con el siguiente parámetro:



Outlook.exe /resetnavpane

Y listo. ¡A trabajar se ha dicho!

jueves, 24 de diciembre de 2009

Feliz Navidad


Desde Lobosoft quería desearos a quienes estáis al otro lado de la pantalla unas felices fiestas y un próspero año 2010, repleto de entradas, buenos propósitos y mejores logros. Paz, prosperidad y un mundo que, esperemos conseguirlo, sea un poco más justo para todos.

domingo, 29 de noviembre de 2009

Un mes sin publicar

Llevo un mes sin publicar nada en este blog... La sequía no se nota tanto en el resto, pero la carrera está haciendo estragos por aquí. A ver si consigo marcharme un ritmo de publicaciones. En cualquier caso, y aunque escriba poco o nada por aquí, sigo en activo. Tal vez deba incluir algo más sobre S.I.G., que es un campo en el que estoy trabajando últimamente precisamente gracias a una de las asignaturas de aquella. Ya veremos.


Curiosamente, soy el máximo "autorreferenciador" del blog desde Homo libris. También veo que otros blogs de seguridad me referencian, tal vez de forma injustificada, dada la poco abundante literatura por mi parte en los últimos tiempos. Es el caso de Segurteca. Intentaremos estar a la altura.


También es llamativo que las visitas no cesan. Han descendido algo, pero el día que menos visitas tengo estas alcanzan el número de 250. Sin duda, Google sigue trabajando por mí, jejeje. Eso sí, se notan las publicaciones y la mejora de la indexación en estos casos. Tendré que escribir algo sobre ello.


Ah, y comienza a llover. Una gozada, visto el tiempo caluroso que no termina de irse. ¡Nos leemos!

lunes, 1 de junio de 2009

¿Qué le está haciendo Internet a nuestros cerebros?

Descubro, a través de El cultural de Nerea, un interesante artículo de La Ventana: ¿Qué le esta haciendo Internet a nuestros cerebros?


Es un tema que he tratado en ocasiones con algunos amigos: ¿cómo influye la forma en que leemos en la pantalla, en Internet, sobre nuestra forma de leer, interiorizar y, por fin, aprender? ¿Habéis notado que leéis u os aproximáis de forma diferente a un texto de unos años a esta parte? Algún día me gustaría ahondar un poco más en todo esto. De momento os dejo con el artículo.

viernes, 22 de mayo de 2009

Por un futuro más justo

Jane Goodall, la primatóloga que ha dedicado su vida a estudiar el comportamiento de nuestros primos cercanos, los chimpancés (es, a esta especie, lo que Dian Fossey a los gorilas de montaña), promueve desde su Fundación el reciclado de teléfonos móviles. Como ya sabéis, el Coltán es un mineral muy escaso, componente fundamental de móviles, ordenadores portátiles y otros dispositivos electrónicos, y mueve grandes intereses y guerras en África.

Por ello, os dejo la noticia porque creo que es lo suficientemente interesante como para que se le dé difusión y apoyo.

¡Saludos, y buen fin de semana!