2013-03-04 5 views
8

Мне было интересно, можем ли мы рассматривать методы расширения как реализацию шаблона декоратора в C#? поскольку цель та же, но логика реализации, а также концепция могут различаться?Методы расширения - узор декоратора

Спасибо!

+5

Как они вообще похожи на узор декоратора? Методы расширения - это просто синтаксический сахар для вызова статических методов. Статические методы - «простые старые функции». Декоратор - это когда у вас есть объект, который расширяет поведение другого типа объекта, обертывая/делегируя его методы или добавляя новые. – millimoose

+4

Я думаю, что это очень хороший/правильный вопрос для новичка. Я не уверен, почему пустые голоса. –

+1

Я думаю, вы пропустите что-то понять. Конечно, расширение mehtod «украшает» тип, когда вы смотрите на Intelisense. Но посмотрите на хорошую реализацию декоратора, такую ​​как «StreamReader». Вы заметили, что это производный класс от 'Stream' и действительно украшает функциональность Stream. –

ответ

7

Шаблон декоратора обычно связан с добавлением поведения к конкретным экземплярам типа независимо от других экземпляров. В случае метода расширения он затрагивает все экземпляры типа, которые скомпилированы в той же области. Я бы сказал, что это не часть шаблона декоратора.

6

Я думаю, что вы неправильно поняли образец декоратора.
Речь идет не о добавлении новых методов. Речь идет о добавлении новых функций в существующих методов.

Итак, нет, методы расширения не являются реализацией рисунка декоратора.

+0

Я вижу сейчас, но есть ли конкретная реализация декоратора в .NET, не скрытая в какой-то библиотеке, которую мы когда-либо использовали? – Mohtaa

+1

В настоящее время я не знаю ничего от моей головы, но если вы ищете пример, вы можете посмотреть [здесь] (http://stackoverflow.com/a/5551276/572644). Я использовал конкретный, объясняя шаблон. –

Смежные вопросы