Что значит украшать или добавлять атрибут к классу или параметру?
Какова цель и когда я это сделаю?
Ссылки на ресурсы и прямые ответы приветствуются.
Благодарю.
Что значит украшать или добавлять атрибут к классу или параметру?
Какова цель и когда я это сделаю?
Ссылки на ресурсы и прямые ответы приветствуются.
Благодарю.
Когда вы добавляете декоратор в С#, это похоже на добавление свойства к классу/методу. К нему будет прикреплен атрибут.
Если вы напишите unit тест, вы встретите простой декоратор TestMethod
, например:
[TestMethod]
public void TestMethod1()
{
}
Фреймворк будет использовать декораторы для проверки методов тестирования в наборе тестов.
Вы можете проверить атрибут здесь
Есть еще одна приятная статья о написании пользовательских атрибутов
Декораторы не ограничиваются формой декораторов []. Для этого также есть шаблон дизайна, о котором уже упоминали другие.
Декоратор был одним из первых 26 шаблонов, описанных в книге "Банды четырех" "Шаблоны дизайна". Они хорошо это описывают здесь.
Резюме:
Декоратор: добавьте дополнительную функциональность классу во время выполнения, где создание подклассов приведет к экспоненциальному росту новых классов
Шаблоны не зависят от языка. Это описания решений общих проблем в объектно-ориентированном программировании. Возможно, даже предпочтительнее, обсуждать их без привязки к конкретному языку. Примеры в оригинальной книге были написаны в C++ и Smalltalk. Ни Java, ни С# не существовали, когда книга была впервые опубликована в 1995 году.
Украшение класса означает добавление функциональности в существующий класс. Например, у вас есть класс SingingPerson
, у которого есть талант пения.
public class SingingPerson
{
public string Talent = "I can sing";
public string DoTalent()
{
return Talent;
}
}
Позже вы решили, что класс SingingPerson
должен также танцевать, но не хочет изменять существующую структуру класса. То, что вы делаете, - это украсить класс SingingPerson
, создав еще один класс, который содержит добавленную функциональность. Этот новый класс, который вы создадите, принимает объект 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;
}
}
При попытке создать экземпляры этих классов вывод будет следующим:
SingingPerson person1 = new SingingPerson();
Console.WriteLine("Person 1: " + person1.DoTalent());
SingingAndDancingPerson person2 = new SingingAndDancingPerson(person1);
Console.WriteLine("Person 2: " + person2.DoTalent());
Console.ReadLine();