¿Qué significa Decorar o agregar un atributo a una clase o parámetro?
¿Cuál es el propósito y cuándo haría esto?
Los enlaces a recursos y respuestas directas son bienvenidos.
Cuando agrega un decorador en C #, es como agregar una propiedad a la clase/método. Habrá un atributo adjunto a él.
Si escribe Prueba unitaria, se encontrará con un TestMethod decorador simple como ese:
[TestMethod] public void TestMethod1() { }El marco utilizará los decoradores para verificar qué métodos de prueba hay en el conjunto de prueba.
Puede verificar el atributo aquí
Hay otro artículo agradable de leer sobre la escritura de atributos personalizados
Los decoradores no se limitan a la forma '[ ]' de decoradores. También hay un patrón de diseño para eso, que ya fue mencionado antes por otros.
Decorador fue uno de los 23 patrones originales descritos en el libro "Patrones de diseño" de Gang of Four. Lo describen bien aquí .
Resumen:
Decorador: agregue funcionalidad adicional a una clase en tiempo de ejecución donde la creación de subclases daría como resultado un aumento exponencial de nuevas clases
Los patrones son independientes del lenguaje. Son descripciones de soluciones a problemas comunes en la programación orientada a objetos. Es posible, incluso preferible, discutirlos sin referencia a un idioma en particular. Los ejemplos del libro original se escribieron en C++ y Smalltalk. Ni Java ni C# existían cuando el libro se publicó por primera vez en 1995.
Decorar una clase significa agregar funcionalidad a una clase existente. Por ejemplo, tiene una clase SingingPerson que tiene talento para cantar.
public class SingingPerson { public string Talent = "I can sing"; public string DoTalent() { return Talent; } } Más tarde, decidió que la clase SingingPerson también debería poder bailar, pero no quiere alterar la estructura de clases existente. Lo que haces es decorar la clase SingingPerson creando otra clase que contenga la funcionalidad añadida. Esta nueva clase que creará toma un objeto SinginPerson .
public class SingingAndDancingPerson { SingingPerson person; public string Talent { get; set; } public SingingAndDancingPerson(SingingPerson person) { this.person = person; } public string DoTalent() { this.Talent = person.Talent; this.Talent += " and dance"; return this.Talent; } }Cuando intente crear instancias de estas clases, el resultado será el siguiente:
SingingPerson person1 = new SingingPerson(); Console.WriteLine("Person 1: " + person1.DoTalent()); SingingAndDancingPerson person2 = new SingingAndDancingPerson(person1); Console.WriteLine("Person 2: " + person2.DoTalent()); Console.ReadLine();