Patrón Interfaz Marcadora (II) - Jorge Serrano - MVP Visual Developer - Visual Basic

Patrón Interfaz Marcadora (II)

Introducción

En la entrada anterior, vimos en qué consistía el Patrón Interfaz Marcadora y cómo usarlo a través de interfaces.

En esta entrada vamos a ver cómo implementar el Patrón Interfaz Marcadora a través de atributos.

 

Implementación del Patrón Interfaz Marcadora con atributos

Lo primero que debemos hacer es crear una clase que actúe como atributo con el cuál decorar una clase con el fin de hacerla del tipo que deseemos.

Por ejemplo:

   1: public class MarcadoraAttribute : System.Attribute
   2: {
   3: } // MarcadoraAttribute

Una vez creado este atributo, crearemos la clase que decoraremos con el atributo que hemos creado para hacerla del tipo que queremos.

   1: [Marcadora]
   2: public class Foo
   3: {
   4: } // Foo

Finalmente tendremos la posibilidad de verificar que una determinada clase, está marcada con el atributo que indica que es de un tipo concreto.

En nuestro caso y para el ejemplo que hemos preparado, quedará de la siguiente manera:

   1: Foo foo = new Foo();
   2: if (foo.GetType().IsDefined(typeof(MarcadoraAttribute), false))
   3: {
   4:     MessageBox.Show("Es marcadora");
   5: }
   6: else
   7: {
   8:     MessageBox.Show("No es marcadora");
   9: }

Espero que esto le sirva a más de uno para conocer cómo funciona y como utilizar este patrón.

Published 24/4/2012 8:00 por Jorge Serrano
Archivado en: ,
Comparte este post:

Comentarios

Tuesday, April 24, 2012 10:52 AM por Fernando Escolar

# re: Patrón Interfaz Marcadora (II)

Hola Jorge,

Tan solo añadiría una cosa que ya ha comentado Eduard en el anterior Post: Microsoft no recomienda el uso de interfaces vacía y es la causa del error CA1040 de Code Analysis (o FxCop para los amigos :)). Tenéis más información aquí: msdn.microsoft.com/.../ms182128(v=vs.80).aspx

Y efectivamente, la mejor forma de evitar este error es hacer lo que propones en este post :)

Tuesday, April 24, 2012 11:08 AM por Jorge Serrano

# re: Patrón Interfaz Marcadora (II)

Hola Fernando.

Muchas gracias por aportar el enlace.

Es cierto que no se recomienda, pero nadie nos impide que en un desarrollo de Software anulemos la regla CA1040 de Code Analysis y hagamos interfaces marcadoras con interfaces vacías.

De hecho, repito que es incluso una posibilidad que puede resultar interesante, aunque yo prefiero el uso de atributos como se indica en esta segunda parte.

Supongo que como en todo, hay una línea muy delgada que separa lo recomendable de lo a veces necesario pese a que sepamos que no es lo recomendable.

¡Muchas gracias por la aportación!

Un saludo.

Tuesday, April 24, 2012 1:37 PM por Javier Torrecilla

# re: Patrón Interfaz Marcadora (II)

Hola Jorge,

Muy buenos posts!

Yo en mis desarrollos tengo un  método extensores genérico, de esta guisa:

      public static bool IsMarker<T>(this T obj) where T:class

      {

          return obj.GetType().IsDefined(typeof(MarkerAttribute), false);

      }

Un saludo!

Tuesday, April 24, 2012 1:55 PM por Jorge Serrano

# re: Patrón Interfaz Marcadora (II)

Buen aporte Javier. :)