Разница между декоратором класса и классом Наследования - PullRequest
0 голосов
/ 13 октября 2018

Я узнал о NUnit и обнаружил, что мы используем декораторы классов, такие как [TestMethod], перед каждой тестовой функцией.

Затем я узнал о декораторах по этой ссылке.Согласно этому ответу

Когда вы добавляете декоратор в C #, это похоже на добавление свойства в класс / метод .К нему будет прикреплен атрибут.

Я просто хочу спросить, хочу ли я использовать свойство, которое будет использоваться во всем классе (не говоря об одном методе), тогда почему я не выбираю наследование?над классом декоратор

Какая разница ...

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Будьте осторожны, поскольку предоставленная вами ссылка использует слово Декоратор для обозначения 2 совершенно разных концепций.Вопрос в этой ссылке задает этот вопрос:

Что означает Декорировать класс или параметр?

Какова цель и когда я это сделаю?

В некоторых ответах ответьте на вопрос правильно, конкретно это и это .Оба они говорят о Pattern Decorator .

Однако, этот ответ говорит о чем-то совершенно ином.Хотя декоратор может использоваться для обозначения Атрибуты (те, которые в C # заключены в квадратные скобки), но этот поток SO использует его для обозначения Pattern Decorator и Атрибуты .


Атрибуты

Атрибуты объяснены здесь .


Шаблон декоратора

Шаблон Pattern Decorator объясняется здесь .


Pattern Decorator vs Inheritance

Есть хорошее сравнение здесь .

0 голосов
/ 13 октября 2018

Основное различие заключается в том, что при использовании наследования по сравнению с декоратором может быть экспоненциально много подклассов.

Суть использования атрибута декоратора, подобного этому, заключается в том, что вы можете повторно использовать один и тот же декоратор вмногие классы и методы (многоразовые)

В вашем случае все совершенно иначе.[TestMethod] используется как «маркер», а не как декоратор, чтобы дать фреймворку знать, какой метод является тестовым методом.Я не вижу никакой связи с наследованием в этом случае.

Вы также можете использовать интерфейсы как «маркер», но это не так гибко, как использование атрибутов в этом случае.

...